From f697b664616ff7d56b0ccfa528a44832eba68da3 Mon Sep 17 00:00:00 2001
From: Manuel Cillero
Date: Wed, 26 Jul 2017 20:02:02 +0200
Subject: [PATCH] New module 'Calendar'
---
sites/all/modules/calendar/CHANGELOG.txt | 339 ++++++
sites/all/modules/calendar/LICENSE.txt | 274 +++++
sites/all/modules/calendar/calendar.css | 372 +++++++
sites/all/modules/calendar/calendar.info | 16 +
sites/all/modules/calendar/calendar.install | 157 +++
sites/all/modules/calendar/calendar.module | 921 +++++++++++++++++
.../calendar_ical/calendar-view-ical.tpl.php | 55 +
.../calendar/calendar_ical/calendar_ical.info | 17 +
.../calendar_ical/calendar_ical.install | 54 +
.../calendar_ical/calendar_ical.module | 32 +
.../calendar_ical/calendar_ical.views.inc | 82 ++
.../calendar_ical/calendar_ical_admin.inc | 115 +++
.../calendar_plugin_display_ical.inc | 218 ++++
.../calendar_plugin_style_ical.inc | 254 +++++
.../modules/calendar/calendar_ical/theme.inc | 81 ++
.../translations/calendar_ical.cs.po | 117 +++
.../translations/calendar_ical.hu.po | 70 ++
.../translations/calendar_ical.pot | 169 +++
.../calendar_multiday/calendar-overlap.css | 803 +++++++++++++++
.../calendar_multiday/calendar_multiday.css | 852 +++++++++++++++
.../calendar_multiday/calendar_multiday.info | 15 +
.../calendar_multiday.install | 12 +
.../calendar_multiday.module | 90 ++
.../calendar_multiday/calendar_overlap.js | 87 ++
.../calendar_multiday/includes/calendar.inc | 619 +++++++++++
.../theme/calendar-datebox.tpl.php | 19 +
.../theme/calendar-day-node.tpl.php | 58 ++
.../theme/calendar-day-overlap.tpl.php | 135 +++
.../theme/calendar-day.tpl.php | 81 ++
.../theme/calendar-main.tpl.php | 26 +
.../theme/calendar-mini.tpl.php | 47 +
.../theme/calendar-month-col.tpl.php | 16 +
.../calendar-month-multiple-node.tpl.php | 28 +
.../theme/calendar-month-node.tpl.php | 64 ++
.../theme/calendar-month-row.tpl.php | 18 +
.../theme/calendar-month.tpl.php | 57 +
.../theme/calendar-week-multiple-node.tpl.php | 27 +
.../theme/calendar-week-node.tpl.php | 64 ++
.../theme/calendar-week-overlap.tpl.php | 188 ++++
.../theme/calendar-week.tpl.php | 124 +++
.../theme/calendar-year.tpl.php | 27 +
.../calendar_multiday/theme/theme.inc | 972 ++++++++++++++++++
.../modules/calendar/help/attachments.html | 1 +
.../modules/calendar/help/calendar.help.ini | 43 +
.../all/modules/calendar/help/embedding.html | 15 +
.../calendar/help/getting-started.html | 22 +
.../modules/calendar/help/ical-export.html | 2 +
.../modules/calendar/help/ical-import.html | 4 +
sites/all/modules/calendar/help/ical.html | 1 +
.../calendar/help/images/calendar_colors.jpg | Bin 0 -> 50004 bytes
.../calendar/help/images/calendar_colors2.jpg | Bin 0 -> 55312 bytes
.../calendar/help/images/ical_import.png | Bin 0 -> 319007 bytes
sites/all/modules/calendar/help/overview.html | 3 +
sites/all/modules/calendar/help/settings.html | 7 +
.../modules/calendar/includes/calendar.inc | 203 ++++
.../calendar/includes/calendar.views.inc | 231 +++++
.../includes/calendar.views_default.inc | 510 +++++++++
.../calendar_plugin_display_attachment.inc | 242 +++++
.../calendar_plugin_display_block.inc | 78 ++
.../includes/calendar_plugin_display_page.inc | 297 ++++++
.../includes/calendar_plugin_style.inc | 180 ++++
.../includes/calendar_view_plugin_style.inc | 173 ++++
.../includes/translations/includes.cs.po | 235 +++++
.../all/modules/calendar/jcalendar/Readme.txt | 3 +
.../calendar/jcalendar/images/cross.png | Bin 0 -> 655 bytes
.../calendar/jcalendar/images/throbber.gif | Bin 0 -> 5886 bytes
.../modules/calendar/jcalendar/jcalendar.css | 49 +
.../modules/calendar/jcalendar/jcalendar.info | 14 +
.../modules/calendar/jcalendar/jcalendar.js | 82 ++
.../calendar/jcalendar/jcalendar.module | 97 ++
.../jcalendar/translations/jcalendar.cs.po | 28 +
.../jcalendar/translations/jcalendar.hu.po | 27 +
.../jcalendar/translations/jcalendar.pot | 49 +
.../calendar/js/calendar_colorpicker.js | 40 +
sites/all/modules/calendar/readme.txt | 33 +
.../calendar/theme/calendar-datebox.tpl.php | 19 +
.../calendar/theme/calendar-day-node.tpl.php | 53 +
.../calendar/theme/calendar-day.tpl.php | 81 ++
.../calendar/theme/calendar-main.tpl.php | 26 +
.../calendar/theme/calendar-mini.tpl.php | 47 +
.../calendar-month-multiple-node.tpl.php | 28 +
.../theme/calendar-month-node.tpl.php | 53 +
.../calendar/theme/calendar-month.tpl.php | 46 +
.../theme/calendar-week-multiple-node.tpl.php | 27 +
.../calendar/theme/calendar-week-node.tpl.php | 53 +
.../calendar/theme/calendar-week.tpl.php | 80 ++
.../calendar/theme/calendar-year.tpl.php | 27 +
sites/all/modules/calendar/theme/theme.inc | 745 ++++++++++++++
.../calendar/theme/translations/theme.cs.po | 30 +
.../calendar/translations/calendar.pot | 102 ++
sites/all/modules/calendar/translations/de.po | 578 +++++++++++
.../calendar/translations/general.cs.po | 42 +
.../calendar/translations/general.hu.po | 152 +++
.../calendar/translations/includes.hu.po | 198 ++++
.../calendar/translations/installer.cs.po | 30 +
.../calendar/translations/installer.hu.po | 29 +
.../modules/calendar/translations/root.cs.po | 79 ++
.../modules/calendar/translations/root.hu.po | 294 ++++++
.../modules/calendar/translations/theme.hu.po | 24 +
99 files changed, 13284 insertions(+)
create mode 100644 sites/all/modules/calendar/CHANGELOG.txt
create mode 100644 sites/all/modules/calendar/LICENSE.txt
create mode 100644 sites/all/modules/calendar/calendar.css
create mode 100644 sites/all/modules/calendar/calendar.info
create mode 100644 sites/all/modules/calendar/calendar.install
create mode 100644 sites/all/modules/calendar/calendar.module
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar-view-ical.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_ical.info
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_ical.install
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_ical.module
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_ical.views.inc
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_ical_admin.inc
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_plugin_display_ical.inc
create mode 100644 sites/all/modules/calendar/calendar_ical/calendar_plugin_style_ical.inc
create mode 100644 sites/all/modules/calendar/calendar_ical/theme.inc
create mode 100644 sites/all/modules/calendar/calendar_ical/translations/calendar_ical.cs.po
create mode 100644 sites/all/modules/calendar/calendar_ical/translations/calendar_ical.hu.po
create mode 100644 sites/all/modules/calendar/calendar_ical/translations/calendar_ical.pot
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar-overlap.css
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar_multiday.css
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar_multiday.info
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar_multiday.install
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar_multiday.module
create mode 100644 sites/all/modules/calendar/calendar_multiday/calendar_overlap.js
create mode 100644 sites/all/modules/calendar/calendar_multiday/includes/calendar.inc
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-datebox.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-day-node.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-day-overlap.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-day.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-main.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-mini.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-month-col.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-month-multiple-node.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-month-node.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-month-row.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-month.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-week-multiple-node.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-week-node.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-week-overlap.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-week.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/calendar-year.tpl.php
create mode 100644 sites/all/modules/calendar/calendar_multiday/theme/theme.inc
create mode 100644 sites/all/modules/calendar/help/attachments.html
create mode 100644 sites/all/modules/calendar/help/calendar.help.ini
create mode 100644 sites/all/modules/calendar/help/embedding.html
create mode 100644 sites/all/modules/calendar/help/getting-started.html
create mode 100644 sites/all/modules/calendar/help/ical-export.html
create mode 100644 sites/all/modules/calendar/help/ical-import.html
create mode 100644 sites/all/modules/calendar/help/ical.html
create mode 100644 sites/all/modules/calendar/help/images/calendar_colors.jpg
create mode 100644 sites/all/modules/calendar/help/images/calendar_colors2.jpg
create mode 100644 sites/all/modules/calendar/help/images/ical_import.png
create mode 100644 sites/all/modules/calendar/help/overview.html
create mode 100644 sites/all/modules/calendar/help/settings.html
create mode 100644 sites/all/modules/calendar/includes/calendar.inc
create mode 100644 sites/all/modules/calendar/includes/calendar.views.inc
create mode 100644 sites/all/modules/calendar/includes/calendar.views_default.inc
create mode 100644 sites/all/modules/calendar/includes/calendar_plugin_display_attachment.inc
create mode 100644 sites/all/modules/calendar/includes/calendar_plugin_display_block.inc
create mode 100644 sites/all/modules/calendar/includes/calendar_plugin_display_page.inc
create mode 100644 sites/all/modules/calendar/includes/calendar_plugin_style.inc
create mode 100644 sites/all/modules/calendar/includes/calendar_view_plugin_style.inc
create mode 100644 sites/all/modules/calendar/includes/translations/includes.cs.po
create mode 100644 sites/all/modules/calendar/jcalendar/Readme.txt
create mode 100644 sites/all/modules/calendar/jcalendar/images/cross.png
create mode 100644 sites/all/modules/calendar/jcalendar/images/throbber.gif
create mode 100644 sites/all/modules/calendar/jcalendar/jcalendar.css
create mode 100644 sites/all/modules/calendar/jcalendar/jcalendar.info
create mode 100644 sites/all/modules/calendar/jcalendar/jcalendar.js
create mode 100644 sites/all/modules/calendar/jcalendar/jcalendar.module
create mode 100644 sites/all/modules/calendar/jcalendar/translations/jcalendar.cs.po
create mode 100644 sites/all/modules/calendar/jcalendar/translations/jcalendar.hu.po
create mode 100644 sites/all/modules/calendar/jcalendar/translations/jcalendar.pot
create mode 100644 sites/all/modules/calendar/js/calendar_colorpicker.js
create mode 100644 sites/all/modules/calendar/readme.txt
create mode 100644 sites/all/modules/calendar/theme/calendar-datebox.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-day-node.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-day.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-main.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-mini.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-month-multiple-node.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-month-node.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-month.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-week-multiple-node.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-week-node.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-week.tpl.php
create mode 100644 sites/all/modules/calendar/theme/calendar-year.tpl.php
create mode 100644 sites/all/modules/calendar/theme/theme.inc
create mode 100644 sites/all/modules/calendar/theme/translations/theme.cs.po
create mode 100644 sites/all/modules/calendar/translations/calendar.pot
create mode 100644 sites/all/modules/calendar/translations/de.po
create mode 100644 sites/all/modules/calendar/translations/general.cs.po
create mode 100644 sites/all/modules/calendar/translations/general.hu.po
create mode 100644 sites/all/modules/calendar/translations/includes.hu.po
create mode 100644 sites/all/modules/calendar/translations/installer.cs.po
create mode 100644 sites/all/modules/calendar/translations/installer.hu.po
create mode 100644 sites/all/modules/calendar/translations/root.cs.po
create mode 100644 sites/all/modules/calendar/translations/root.hu.po
create mode 100644 sites/all/modules/calendar/translations/theme.hu.po
diff --git a/sites/all/modules/calendar/CHANGELOG.txt b/sites/all/modules/calendar/CHANGELOG.txt
new file mode 100644
index 0000000..3596234
--- /dev/null
+++ b/sites/all/modules/calendar/CHANGELOG.txt
@@ -0,0 +1,339 @@
+Views Calendar 6.x
+==================
+
+See documentation at http://drupal.org/node/262064.
+
+Version 2.0 dev
+=================
+
+Version 6.2.4
+=============
+- Theme folder got lost in 6.2.3 release.
+
+Version 6.2.3
+=============
+- #811704 Fix broken handling of calendar links that looses track of where you are if you click around too much.
+- #720868 by dereine and KarenS, Fix argument handling for dates outside allowed range so only page views return 404.
+- #1005412 by developer-x, fix multiday date id.
+- #999708 Try to avoid fatal errors from duplicate functions when enabling the Multiday module.
+- #1003938 Fix position of multiday navigation when displayed in a block.
+- #708258 by Kars-T, remove D7 drupal_exit() call from popup.
+- #372988 by joachim, Eliminate 'broken field' message in view summary when no date link is chosen.
+- #870018 by crell, don't call date_limit_format thousands of times.
+- #931392 by developer-x, Add multiday striping effect as an optional alternative display.
+- #978442 by bwynants and KarenS, fix some remaining brokenness from ical validation fix.
+- #638620 by ericduran, show add event link to user with administer nodes permissions.
+- #439454 by TheRec, Darren Oh, don't show link to calendar day if there are no items.
+- #389334 by Gribnif and dnotes, fix ical feed to show all repeating dates.
+- #513794 by jhedstrom, add array keys to calendar links for easier theming.
+- #638304 by bricef, make sure time groupings display all items.
+- #697738 by Zoltan Balogh and Magnus, clean html out of translation strings.
+- #452690 by aufumy and mikesteff, avoid errors if calendar min or max dates are empty.
+- #469394 by extect, fix validation of calendar by removing duplicate ids.
+- #522914 by jjemmett, user date_real_url() on week links.
+- #704068 by gibus, add option to color calendar items by group.
+- #360364 by marcushenningsen, don't link to day if there is no day view.
+- #382852 by llslim, make sure replacements patterns work even if field is excluded.
+- #660880 by kaare, fix method of including js in jacalendar module.
+- #760316 by skwashd, arithmetric clean up ical rfc compliance.
+- #613528 Fix Views option handling to set options correctly and avoid attempt to modify property of non-object error.
+
+Version 6.2.2
+=============
+- #429446 Col element must not be in thead.
+- #506944 Localize more link in jcalendar popup.
+- #529826 Add check_plain().
+- #489722 Remove mistake that caused year calendar to process endlessly.
+- #389294 Require the date field in calendar style, needed to identify what cell the date belongs in.
+- #452690 Avoid errors when some date fields are empty (usually when there are multiple date fields in view.)
+- #389294 Avoid errors when date argument or filter is not available as a date field.
+- #454958 Calendar patch was broken in ical.
+- #444526 Fix typo in variable name for calendar translation.
+- #427996 More link logic was reversed.
+- #389294 Avoid errors when date argument or filter is not available as date field.
+
+Version 6.2.1
+=============
+- #385886 Add handling for non-node date fields.
+- #360967 Add method for deleting a custom default calendar.
+
+Version 6.2.0
+=============
+- #377760 Fix alias handling for node edit and delete links.
+- Fix the way the node type filter was configured in the default view.
+- Get rid of truncated field display options, Views now handles that.
+- #372625 Reset year granularity after processing months on year view now that Views has changed processing order, also omit deprecated themes, we now use date_nav_title.
+- #345077 Make sure duplicate copies of the date field each get to theme the raw, unaltered, data.
+- #338253 Re-work date_t() to create a more robust method of handling translations of abbreviations and other short strings.
+- Add more description text to the ical description and location fields to clarify that you have to add fields to the view.
+- #368632 Make sure iCal exports handle multi-day dates correctly.
+- Clean up inconsistent use of calendar_display and calendar_type to use only calendar_type.
+- #365113 Remove agenda hour column when not grouping by hour.
+- #357019 Add method to hide all items and show only count or 'more' link.
+- #350229 Make sure Calendar doesn't get updated before Views.
+- #341841 Add 'has-events' and 'has-no-events' classes for easier themeing.
+- Make sure there is a sane defualt value for the iCal summary field to avoid theme errors.
+- #364770 Add new date link needs to convert underscore to hyphen.
+- #370092 Add all-day checkbox to date field and use it in calendar.
+- #369573 Fix jCalendar popup when used without clean urls.
+- #367627 Fit jCalendar popup into window better.
+- #368632 Fix repeating date iCal export: show date only one time and add RRULE to export.
+- #332273 Use field alias in iCal location and description fields to avoid problems with CCK table optimization.
+- #328097 Fix some small problems found while researching this issue. The main fix was in the Date filter.
+- Allow removal of displays, still no UI since they can't go on other views.
+- Don't try to set date argument when another argument precedes it.
+- #349409 Fix jcalendar popup.
+- Add option to link calendar to content type, and add link to calendar to node, and link to node/add to calendar.
+- #342119 Make sure calendar_type option is in expected format, maybe this was causing the translation problems?
+- #343090 'Today' highlighting got lost in last round of theme changes, restore it.
+- #340215 Make sure day and week time slots are checking >= instead of >.
+- #327221 Don't add 'today' class in empty blocks.
+- #341964 Get missing back/next links back in year view (needs fix in Date module, too).
+- Fix some logic in stripe labels that was showing empty content type stripes and missing taxonomy stripes.
+
+Version 2.0 rc6
+=================
+
+- All day events were getting dropped.
+- #341202, #339457, #337952, #329128, #337787, #341203, Fix repeating and multiple date displays.
+- #303714 Make sure calendar obeys the date format chosen in the view now that the Date module has a 'time' format available.
+- #340604 Seed taxonomy color stripes with #ffffff to be sure the colorpicker works right.
+- #340215 Fix broken method of setting the key for start times.
+- Get rid of hard-coded 'UTC' for database values in favor of consistently using date_get_timezone_db().
+- Make sure parent pre_execute() function is called so things like items per page get set.
+- Set calendar item font size at a higher level to make sure all sub-elements pick it up and make it easier to override in the theme.
+- Make sure node stripes aren't created when there is no stripe color set.
+- Don't truncate fields if there is no truncate value.
+- Fix field name code in default view, don't add '_value' to core fields!
+- Make sure default view doesn't make any assumptions about available content types.
+- #337635 Make sure Views doesn't limit the calendar results to 10 items in the calendar style.
+- #338515 Initialize $date_field_options to avoid error when editing style.
+- Consolidate error messages about missing Date arguments so we don't get the message repeated, and add more info about how to fix.
+- #337635 Make sure max_items defaults to unlimited.
+- Remove deprecated iCal code left over from old method of importing feeds.
+- #337665 Fix bad variable name that kept month titles from showing.
+- #337664 Add warning message when selecting terms if no vocabulary has been set yet.
+- #337646 We only need a single Advanced Help icon for Calendar settings.
+
+Version 2.0 rc5
+=================
+
+New Features:
+=============
+- Update day and week view to use new configurable, agenda-style calendar views grouped by hour.
+- #337004 By hotspoons: Add settings to display calendar legend colors based on taxonomy.
+- #319344 By MothersClick.com: Add updated css styles, settings to truncate titles in calendar cells
+ and limit the number of events that display in calendar cells.
+- Make default calendar view configurable so we can create default calendars for specific date fields.
+- Add a date_embed_view() function to provide a way to embed views and have their navigation move
+ either together or separately, and document it in Advanced help.
+- Start building Advanced help instructions, including how to do iCal import using Feed API.
+- #290365 Add upcoming events block to default calendar.
+
+Other:
+======
+- Rename values added to views to avoid name clashes and keep all date values together.
+- #329153 Make sure day link in calendar mini block goes to full day view.
+- Set day-splitting timezone to be sure it will split days using the time displayed in the calendar.
+- #329418 Fix week number formatting.
+- Adapt processing to make sure only selected dates display in nodes, views, and calendars.
+- Improve the look of the day view by postponing the time when the item is output so we have more information in the template.
+- Had the block view identifier set too early, before we know if the block is being used, causing all views to act like blocks.
+- Only the month view needs the 'mini' theme, make sure it isn't used anywhere else.
+- #326597 Make sure ical icon theme arguments and parameters sent to it match.
+- Get the links in embedded views and blocks to work correctly using a helper function date_real_url().
+- Add option to maximum items per day to either show maximum plus 'more' link or hide all and link to day.
+- Use view->date fields from either date arguments or date filters.
+- Add helper function for creating calendar urls based on type or requested argument.
+- Fix undefined index in new Date popup calendar option.
+- Make sure 'time ago' formats will work in calendar.
+- Fix logic problem in the validation of multiple dates that use the grouped value, non-multiple dates were triggering the error.
+- #279679 Fix broken handling of date format selection.
+- Make sure popup date switcher isn't shown in the mini calendar.
+- Adjust the recent changes to the navigation header to be sure only the calendar header and not the date browser is affected.
+- #292164 Keep calendar date selector description from floating out of block in IE.
+- #298929 Fix code so that calendar legend doesn't display empty div when empty.
+- Make some fixes to the calendar legend to be sure text added for accessibility stays invisible in all themes.
+- #321831 Make sure day view gets populated.
+- Rework html of Year view so month titles will match block view month title for easier css themeing.
+- #174580 Add rel=nofollow to back/next links.
+- #289166 Change ical link in default calendar to 'all time' link instead of single period.
+- #315843 Make sure there is validation to keep you from trying to group multiple date values in the calendar.
+- Add the popup calendar date selector back into the D6 version.
+
+Version 2.0 rc4
+=================
+
+- Change the jcalendar code to use the new display_ids.
+- Make it possible to expose the calendar parts in the UI. To make this work better, combine year, month, day, and week handlers into a single handler.
+- #311485 Make sure mini calendar has the right number of columns if using week number.
+- #317660 Hard code line feeds in ical export to be sure they come through correctly in all systems.
+- Start adding in Advanced help for the calendar.
+- Move the colorpicker js info to the plugin so it isn't loaded everywhere.
+- #314682 Add missing url() in jcalendar js code.
+- #315955 Translation cleanup.
+- Get colorpicker working in the Views UI again. I'm not loading the js in the best place, but at least it works now.
+- Get rid of deprecated theme for ical output that is not being used in current code.
+- #307544 Get rid of extra line feed at end of ical description and make sure template works correctly.
+- #312170 Fix misplaced parenthesis in jCalendar theme.
+- #313161 Use date_id as iCal UID to be sure it is unique.
+- #303537 Display:relative should be position:relative.
+- #313538 Fix color typo in calendar.css.
+- #309608, #309253 Get rid of attempt to simplify the navigation query, it is too easily broken.
+- #309391 Now that the Views fatal error for missing display handlers is fixed, add the ical display back.
+
+Version 2.0 rc2
+=================
+
+- #301414 Revert http://drupal.org/cvs?commit=133523, wrong way to fix that.
+- #308372 Make ical display handlers are removed from views display table when Calendar iCal is disabled.
+- Eliminate query for navigation display.
+- Calendar ical theme was in the wrong folder, move it to the ical folder.
+- #303000 The calendar ical feed was deeply sub-classed and wasn't working right, rewrite it to not require so many other classes.
+- #294469 Get rid of redundant timezone conversion that showed dates without timezone conversion in UTC.
+- #303999 Correct theme paths for Views themes.
+- #304762 Add missing folders for translations.
+- Update to new Views2 API. Now requires latest versions of Views and CCK, and files have been re-arranged.
+- Replace all include_once() with require_once().
+- #301324 Rework calendar date selector to use site short date format.
+- Fix css for week number to be sure it stays small in all browsers.
+
+Version 2.0 rc1
+=================
+
+- Fix jCalendar popup so it doesn't do anything on items without a nid, like remote nodes.
+- Make sure Devel module doesn't add queries to Calendar Popups.
+- #292306 Make sure no error is thrown if $GLOBALS['calendar_stripes'] is empty.
+- Fix day theme, there is no rows array here, it is a single rendered value.
+- CCK field labels were getting lost if 'widget' was selected.
+- Don't omit date fields that are not used in the date argument from being displayed on calendar nodes.
+- Make sure database values with empty timezone names get defaulted to use site timezone in calendar handling.
+- Views 2 moves views_query_alter() and views_pre_view() into calendar.views.inc.
+- Calendar legend block should now be working correctly.
+- Rework the calendar legend to incorporate imported ical node colors as well as internal colors.
+- Add helper function calendar_get_node_link() to construct a node link for either an internal or external node.
+- #272330 Rework css to add background colors where colors are defined and group colors together in the file.
+- Add 'All day' themes for use in nodes and calendar psuedo nodes.
+
+Version 2.0 beta4
+=================
+
+- #270318 Get date browser and calendar navigation working correctly when used in a block.
+- Don't attach any displays but the right one for a given argument.
+- #289981, #290328 Fixing broken handling of empty blocks that sometimes kept calendars from displaying in blocks.
+- Clean up logic for creating calendar fields info.
+- #268669 Improve logic for splitting multi-day nodes across calendar dates, patch by emok.
+- Add new DATE_FORMAT_DATE for date-only format that is used throughout the calendar.
+- Make sure week title gets translated by using date_format_date() instead of date_format().
+- #289775 Day link needs a leading zero.
+- Make sure calendars have a min and max date even if the date argument is not the first argument.
+- Tweaked the jcalendar popup html and css a bit to keep title from popping out of the box in some themes.
+- Bring the 5.2 and 6.2 calendar themes into alignment so both use the same styles and themes, including tableless back/next navigation links and themeable headers.
+- #285104 Make sure calendar_colors is always an array, needed for transition to new value.
+- #283902 Make sure date_format() isn't used on items with no calendar dates.
+- #284760 Don't make weekno a link when there is no week view, eliminate some redundant date_format() calls.
+- #276421 Use farbtastic color picker to set calendar stripes, and start process of making stripes more customizable.
+- #282777 Try to make calendar creation in PHP4 more efficient to speed up creation of year calendar.
+- #279195 Remove deprecated calendar_week_range().
+- Set min_date_date and max_date_date in the view object so calendar can be written.
+- #278267 Add a theme for the jcalendar popup.
+- #259127 Remove ajax back/next navigation on mini calendar, it's not working well enough.
+- #268668 Adjust comparison dates for timezone offsets to make sure multi-day events get split correctly.
+- The cached ical feed cannot be used to store date objects, recreate them as needed.
+- #234070 Fix broken ical title.
+- #258501 Make sure calendar.inc is included when creating ical feed.
+- #258515 Fix url in ical export.
+- #266623 Protect against foreach() errors on empty ical feeds.
+- PHP4 can't do comparisons of date objects, so alter calendar comparison code to compare formatted dates instead.
+- Remove as many dependencies as possible from install files and auto-enable necessary modules.
+- #272263 Make sure empty ical stream doesn't get into cache.
+- #272732 Fix missing php closing tag.
+- #261610 Prepare for a jQuery popup in the calendar by adding a unique id to the 'node' and altering the date theme to surpress all other dates if $node->date_id is set.
+- #243172 Theme('calendar_empty') should be theme('calendar_empty_day'), patch by JohnAlbin.
+- Clean up install file included files and include file paths, and auto-enable date_timezone and date_php4.
+- #270818 Fix datebox theme that still defined old deprecated variable 'params'.
+- #270078 Fix typo in calendar-year.tpl.php.
+- #270303 Make sure iCal part of default view only gets added in if iCal is enabled.
+
+Version 2.0 beta3
+=================
+- Update README.txt.
+- Add rrule to template.
+- Remove options from navigation, not really needed.
+- Add in functions to get iCal export working.
+- Get rid of calendar_clear_all() function that is not needed any more now that Views 2 has its own method for tracking settings. Also clean up related install and update code.
+- #269349 Correct calendar handlers to match Views commit 120575, which changed the way handlers are structured.
+
+Version 2.0 beta2
+=================
+- Fix handling of CCK dates in date argument.
+- Move option to show/hide week numbers to a style setting.
+- Get block view working again, remove switch calendar block because it doesn't work in this new system.
+- Get the generic date argument handler pulled completely out of the Calendar module and into the Date API in a way that it can be used for any Views date field in any view.
+- Rework the calendar handling to use the Date API argument in calendar displays and navigation.
+- Keep the calendar displays out of the UI and instead create a default calendar view that has everything set up correctly to reduce confusion and clutter in the UI and to make it easier to create a calendar.
+- Make sure month names show in year view.
+- #262078 Remove deprecated function calendar_info().
+- Cleanup handling of dates with timezone names in the database.
+- Pass a variable to the templates to tell if this calendar is in a block or not, and use that to determine if the links are needed.
+- Get the settings working for controlling the size of the day of week names, adding an option to display the full names.
+- Add a separate template for the mini calendar.
+
+Version 2.0 beta
+================
+- #210844 Make sure empty text displays.
+- #234635 Add calendar_build_nodes() to calendar_ical export processing.
+- #243712 make sure default views are retrieved as well as db views.
+- #235434 Using timezone name instead of timezone object in several places.
+- #233513 Fix missing $selected marker.
+- #233975 Don't bypass theme function.
+- #242686 Fix spelling errors.
+- #240297 make sure id has a value.
+- Make sure new required modules get enabled during the update.
+- Fix To time in calendar, was incorrectly picking up a :59 value.
+- Make sure min and max dates are in localtime.
+- #225459 Fix days that span multiple days.
+- #220657 Revert to using the API instead of templates for drawing the calendar.
+- #186875 make sure navigation is always returned as an array so it doesn't break table theme.
+- Remove database timezone handling by rolling back to previous version that used offsets instead. Based on problems noted in #218479 and #220663, we cannot count on database timezone handling to be available in MYSQL or work consistently with the timezone names that PHP uses in POSTGRES, so trying to do timezone conversions in the database is not going to work.
+- #219200 Make sure views is available during install.
+- #218704 Fix error in setting array variable.
+- Getting rid of offsets!! Alter query code to cast ISO and UNIX dates to native datetimes and do timezone conversion in the database. Much faster and more accurate.
+ The offset fields can now be dropped from the Date fields since we only need the timezone name to do the conversion.
+- Simplify the query a bit, but it's still very complex. We need a native datetime field so we can let the db do this the right way.
+- Make sure calendar works with an argument before the calendar.
+- The popup calendar datepicker needs a default value in the normal datetime format.
+- Add settings option to not display year, month, day, or week view and adjust links to hide any link to hidden displays.
+- Get rid of separate mini args and so mini and main calendar move together. This has been often requested and we already have too much complication in tracking various filter and non-calendar arguments in the view.
+- Make sure ical dates only get shown once in views with more than one date field.
+- Make sure 'today', 'future', and 'past' classes don't get applied to non-date cells.
+- #216365 make sure all needed files are included in the install files.
+- We can't trust the database date conversion unless we have the right offset stored in the database, so only the date-specific dates have the right values for this to work. All others must be retrieved as UTC values and converted in PHP.
+- Make sure functions are available during install.
+- #128602 add classes for 'past' and 'future' to date boxes, not using them by default, but available to css.
+- #211568 Add setup option to show first 1, 2, or 3 letters of day names in mini calendar.
+- Missing a closing div tag in the month view.
+- Get rid of deprecated function date_time().
+- Fix date format for day view.
+- Wrong field name used to select date format.
+- Set the 'today' class before incrementing the date.
+- More clean up of themes to be sure both remote and local items have a reasonable display and to provide a theme to consistantly display dates.
+- Fix title and url of mini calendar.
+- Get iCal import working again in new version.
+- Non-calendar views should now be working, so you can switch between calendar, table, list, teasers, and nodes for the display for each time period.
+- Make sure $node->url is set so the link to the node works.
+- Move more of the code to the .inc file.
+- Clean up the date selector and add a new function to detect the calendar week from a date.
+- Add a dependency on Date Timezone.
+- Fix a critical typo that keeps more than one value from showing up for a day.
+- Clean up theme code.
+- Make the new date selector dependent on the Date Popup module.
+- Rework the calendar to pull values from a template table so we can browse and navigate by calendar week. This simplifies the code and hopefully will speed up processing the calendar since the database is doing the work of constructing the calendar template instead of using PHP computations. This method is also a more accurate way of computing calendar weeks. Requires an update to populate a template table. This works because there are only 14 possible calendar templates no matter how many years you go back or forward.
+- Add in the jQuery popup selector as a method to jump to different dates.
+- Fix theme error in day view that repeated all previous items with each new item.
+- Make sure blank nodes have the right values to create blank calendar pages.
+- Standardize on use of date_format_date() to get translations done on the formatted values of date parts.
+- Clean up css for month date boxes so display in Firefox and IE looks the same.
+- Lost the node nid in some places which kept dates from showing up.
+- Have to keep views handlers in calendar.module not in calendar_api.inc so they can be discovered when needed.
+- Updating Calendar HEAD with new version of Calendar module that works with the new 5.2 Date API in Date HEAD.
diff --git a/sites/all/modules/calendar/LICENSE.txt b/sites/all/modules/calendar/LICENSE.txt
new file mode 100644
index 0000000..2c095c8
--- /dev/null
+++ b/sites/all/modules/calendar/LICENSE.txt
@@ -0,0 +1,274 @@
+GNU GENERAL PUBLIC LICENSE
+
+ Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
+Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
+verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public License
+applies to most of the Free Software Foundation's software and to any other
+program whose authors commit to using it. (Some other Free Software
+Foundation software is covered by the GNU Library General Public License
+instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service if
+you wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have. You must make
+sure that they, too, receive or can get the source code. And you must show
+them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients
+to know that what they have is not the original, so that any problems
+introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will individually
+obtain patent licenses, in effect making the program proprietary. To prevent
+this, we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+ MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms
+of this General Public License. The "Program", below, refers to any such
+program or work, and a "work based on the Program" means either the
+Program or any derivative work under copyright law: that is to say, a work
+containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language. (Hereinafter, translation
+is included without limitation in the term "modification".) Each licensee is
+addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made
+by running the Program). Whether that is true depends on what the Program
+does.
+
+1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+thus forming a work based on the Program, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in
+part contains or is derived from the Program or any part thereof, to be
+licensed as a whole at no charge to all third parties under the terms of this
+License.
+
+c) If the modified program normally reads commands interactively when run,
+you must cause it, when started running for such interactive use in the most
+ordinary way, to print or display an announcement including an appropriate
+copyright notice and a notice that there is no warranty (or else, saying that
+you provide a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this License.
+(Exception: if the Program itself is interactive but does not normally print such
+an announcement, your work based on the Program is not required to print
+an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be
+reasonably considered independent and separate works in themselves, then
+this License, and its terms, do not apply to those sections when you distribute
+them as separate works. But when you distribute the same sections as part
+of a whole which is a work based on the Program, the distribution of the
+whole must be on the terms of this License, whose permissions for other
+licensees extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to
+work written entirely by you; rather, the intent is to exercise the right to
+control the distribution of derivative or collective works based on the
+Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of a
+storage or distribution medium does not bring the other work under the scope
+of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1
+and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source
+code, which must be distributed under the terms of Sections 1 and 2 above
+on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give
+any third party, for a charge no more than your cost of physically performing
+source distribution, a complete machine-readable copy of the corresponding
+source code, to be distributed under the terms of Sections 1 and 2 above on
+a medium customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for
+noncommercial distribution and only if you received the program in object
+code or executable form with such an offer, in accord with Subsection b
+above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source code
+means all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation and
+installation of the executable. However, as a special exception, the source
+code distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel,
+and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with the
+object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License. Any attempt otherwise to copy,
+modify, sublicense or distribute the Program is void, and will automatically
+terminate your rights under this License. However, parties who have received
+copies, or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the
+Program or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the
+Program (or any work based on the Program), you indicate your acceptance
+of this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these terms and
+conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In such
+case, this License incorporates the limitation as if written in the body of this
+License.
+
+9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will be
+similar in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that
+version or of any later version published by the Free Software Foundation. If
+the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make
+exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE,
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT
+PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
+AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR
+ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN
+IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/sites/all/modules/calendar/calendar.css b/sites/all/modules/calendar/calendar.css
new file mode 100644
index 0000000..2148714
--- /dev/null
+++ b/sites/all/modules/calendar/calendar.css
@@ -0,0 +1,372 @@
+/* calendar calendar table styles */
+.calendar-calendar tr.odd, .calendar-calendar tr.even {
+ background-color:#fff;
+}
+.calendar-calendar table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin:0 auto;
+ padding:0;
+ width: 100%; /* Setting at 100% causes problem in Internet Explorer. */
+}
+.calendar-calendar .month-view table {
+ border:none;
+ padding:0;
+ margin:0;
+ width:100%;
+}
+
+ /* IE needs a little help to get the side by side tables to the right size */
+.calendar-calendar .year-view td {
+ width:32%;
+ padding:1px;
+ border:none;
+}
+
+.calendar-calendar .year-view td table td {
+ width:13%;
+ padding:0;
+}
+
+.calendar-calendar tr {
+ padding: 0;
+ margin: 0;
+ background-color: white;
+}
+.calendar-calendar th {
+ color: #fff;
+ background-color: #ccc;
+ text-align: center;
+ margin:0;
+}
+.calendar-calendar th a {
+ font-weight: bold;
+ color: #fff;
+ background-color: #ccc;
+}
+.calendar-calendar td {
+ width: 12%; /* 14% is about 1/7 of total table width */
+ min-width: 12%;
+ border: 1px solid #ccc;
+ color: #777;
+ text-align: right;
+ vertical-align: top;
+ margin: 0;
+ padding:0;
+}
+
+/* simplify the mini calendar by removing borders */
+.calendar-calendar .mini {
+ border:none;
+ }
+
+/* format for the week number in the first cell */
+.calendar-calendar td.week {
+ width:1%;
+ min-width:1%;
+ }
+.calendar-calendar .week {
+ clear:both;
+ font-style: normal;
+ color: #555;
+ font-size: 0.8em;
+}
+.calendar-calendar .week a {
+ font-weight:normal;
+}
+
+/* IE6 does not support min-height, using Min-Height fast hack from http://www.dustindiaz.com/min-height-fast-hack */
+.calendar-calendar .inner {
+ min-height:5em;
+ height:auto !important;
+ height:5em;
+ padding:0;
+ margin:0;
+}
+.calendar-calendar .inner div {
+ padding:0;
+ margin:0;
+}
+/* Make sure paragraphs buried in calendar cells use padding, not margins, for separation so the background color doesn't come through. */
+.calendar-calendar .inner p {
+ padding:0 0 .8em 0;
+ margin:0;
+}
+.calendar-calendar td a {
+ font-weight: bold;
+ text-decoration: none;
+}
+.calendar-calendar td a:hover {
+ text-decoration: underline;
+}
+.calendar-calendar td.year,
+.calendar-calendar td.month {
+ text-align: center;
+}
+
+/* format days of the week header cells */
+.calendar-calendar th.days {
+ color: #ccc;
+ background-color: #224;
+ text-align: center;
+ padding:1px;
+ margin:0;
+ }
+
+/* floating day number div */
+.calendar-calendar div.day {
+ float: right;
+ text-align: center;
+ padding: 0.125em 0.25em 0 0.25em;
+ margin: 0;
+ background-color: #f3f3f3;
+ border: 1px solid gray;
+ border-width: 0 0 1px 1px;
+ clear:both;
+ width:1.5em;
+}
+
+/* individual node container */
+.calendar-calendar div.calendar {
+ background-color: #fff;
+ border: solid 1px #ddd;
+ text-align: left;
+ margin:0 .25em .25em 0;
+ width: 96%;
+ float:right; /* needed to keep IE from hiding the floating day number */
+ clear:both;
+}
+/* No floating of day view content because there is no floating day number */
+.calendar-calendar .day-view div.calendar {
+ float:none;
+ width:98%;
+ margin:1% 1% 0 1%;
+}
+
+.calendar-calendar div.title {
+ font-size:.8em;
+ text-align:center;
+}
+
+.calendar-calendar div.title a {
+ color: #000;
+}
+.calendar-calendar div.title a:hover {
+ color: #c00;
+}
+.calendar-calendar .content {
+ clear:both;
+ padding: 3px;
+ padding-left: 5px;
+}
+.calendar div.form-item {
+ white-space: normal;
+}
+
+table td.mini,
+table th.mini,
+table.mini td.week {
+ padding:0 1px 0 0;
+ margin:0;
+ }
+table td.mini a {
+ font-weight:normal;
+ }
+.calendar-calendar .mini-day-off {
+ padding:0px;
+}
+.calendar-calendar .mini-day-on {
+ padding:0px;
+}
+table .mini-day-on a {
+ text-decoration:underline;
+ }
+.calendar-calendar .mini .title {
+ font-size:.8em;
+ }
+.mini .calendar-calendar .week {
+ font-size:.7em;
+ }
+.mini-row {
+ width:100%;
+ border:none;
+}
+.mini{
+ width:32%;
+ vertical-align:top;
+ }
+
+
+/* formatting for the legend stripe and block */
+.calendar-calendar .stripe {
+ height: 5px;
+ width: auto;
+ font-size:1px !important;
+ line-height:1px !important;
+}
+.calendar-calendar .day-view .stripe {
+ width:100%;
+}
+table.calendar-legend {
+ background-color:#ccc;
+ width:100%;
+ margin:0;
+ padding:0;
+}
+table.calendar-legend tr.odd .stripe,
+table.calendar-legend tr.even .stripe {
+ height:12px !important;
+ font-size:9px !important;
+ line-height:10px !important;
+}
+.calendar-legend td {
+ text-align:left;
+}
+
+.calendar-empty {
+ font-size:1px;
+ line-height:1px;
+}
+
+/* formatting for the full day view */
+.calendar-calendar td.calendar-agenda-hour {
+ font-family:serif;
+ text-align:right;
+ border:none;
+ border-top:1px #333 dotted;
+ padding-top:.25em;
+ width:1%;
+}
+.calendar-calendar td.calendar-agenda-no-hours {
+ min-width:1%;
+}
+.calendar-calendar td.calendar-agenda-hour .calendar-hour {
+ font-size:1.2em;
+ font-weight:bold;
+}
+.calendar-calendar td.calendar-agenda-hour .calendar-ampm {
+ font-size:1em;
+}
+.calendar-calendar td.calendar-agenda-items {
+ border:1px #333 dotted;
+ text-align:left;
+}
+.calendar-calendar td.calendar-agenda-items div.calendar {
+ width:auto;
+ padding:.25em;
+ margin:0;
+}
+.calendar-calendar div.calendar div.inner .calendar-agenda-empty {
+ width:100%;
+ text-align:center;
+ vertical-align:middle;
+ padding:1em 0;
+ background-color:#fff;
+}
+
+/* the popup date selector for jumping to a new date */
+.calendar-date-select form {
+ text-align:right;
+ float:right;
+ width:25%;
+}
+.calendar-date-select div,
+.calendar-date-select input,
+.calendar-date-select label {
+ text-align:right;
+ padding:0;
+ margin:0;
+ float:right;
+ clear:both;
+}
+.calendar-date-select .description {
+ float:right;
+}
+.calendar-label {
+ font-weight:bold;
+ display:block;
+ clear:both;
+}
+
+.calendar-calendar div.date-nav {
+ background-color:#ccc;
+ color:#777;
+ padding:0.2em;
+ width:auto;
+ border:1px solid #ccc;
+}
+.calendar-calendar div.date-nav a,
+.calendar-calendar div.date-nav h3 {
+ color:#777;
+}
+.calendar-calendar th.days {
+ background-color:#eee;
+ color:#777;
+ font-weight:bold;
+ border:1px solid #ccc;
+}
+.calendar-calendar td.empty {
+ background:#ccc;
+ border-color:#ccc;
+}
+.calendar-calendar table.mini td.empty {
+ background:#fff;
+ border-color:#fff;
+}
+.calendar-calendar td div.day {
+ border:1px solid #ccc;
+ border-top:none;
+ border-right:none;
+ margin-bottom:2px;
+}
+.calendar-calendar td .inner div,
+.calendar-calendar td .inner div a {
+ background:#eee;
+}
+/* Set small font size for all items in calendar div, themes can override this. */
+/* Use x-small instead of em to avoid multiplying effect in nested items. */
+.calendar-calendar div.calendar {
+ border:none;
+ font-size:x-small;
+}
+.calendar-calendar td .inner div.calendar div,
+.calendar-calendar td .inner div.calendar div a {
+ border:none;
+ background:#ffc;
+ padding:0 2px;
+}
+.calendar-calendar td .inner div.calendar div.calendar-more,
+.calendar-calendar td .inner div.calendar div.calendar-more a {
+ color:#444;
+ background:#fff;
+ text-align:right;
+}
+.calendar-calendar td .inner .view-field,
+.calendar-calendar td .inner .view-field a {
+ color:#444;
+ font-weight:normal;
+}
+
+.calendar-calendar td span.date-display-single,
+.calendar-calendar td span.date-display-start,
+.calendar-calendar td span.date-display-end,
+.calendar-calendar td span.date-display-separator {
+ font-weight:bold;
+}
+.calendar-calendar td .inner div.day a {
+ color:#4b85ac;
+}
+.calendar-calendar tr td.today,
+.calendar-calendar tr.odd td.today,
+.calendar-calendar tr.even td.today {
+ background-color:#C3D6E4;
+}
+.calendar-calendar td .inner div.calendar div div.view-data-node-data-field-date-field-date-value {
+ border-bottom:1px solid #ccc;
+}
+
+/* The following are not used by default but are available for themes */
+.calendar-calendar td.past {}
+.calendar-calendar td.future {}
+.calendar-calendar td.has-events {}
+.calendar-calendar td.has-no-events {}
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar.info b/sites/all/modules/calendar/calendar.info
new file mode 100644
index 0000000..a669bc8
--- /dev/null
+++ b/sites/all/modules/calendar/calendar.info
@@ -0,0 +1,16 @@
+; $Id: calendar.info,v 1.8 2008/04/23 23:42:53 karens Exp $
+name = Calendar
+description = Views plugin to display views containing dates as Calendars.
+dependencies[] = views
+dependencies[] = date_api
+dependencies[] = date_timezone
+package = Date/Time
+core = 6.x
+
+
+; Information added by drupal.org packaging script on 2011-01-03
+version = "6.x-2.4"
+core = "6.x"
+project = "calendar"
+datestamp = "1294072550"
+
diff --git a/sites/all/modules/calendar/calendar.install b/sites/all/modules/calendar/calendar.install
new file mode 100644
index 0000000..9a69003
--- /dev/null
+++ b/sites/all/modules/calendar/calendar.install
@@ -0,0 +1,157 @@
+update.php and run the remaining updates.', array('@update-php' => base_path() .'update.php?op=selection')), 'warning', FALSE);
+ $ret['#abort'] = array('success' => FALSE, 'query' => t('calendar.module has updates, but cannot be updated until views.module is updated first.'));
+
+ return $ret;
+ }
+
+ variable_del('calendar_empty_arg');
+
+ // Can't use variable_del because we don't have a reliable
+ // way to find the old view names.
+ db_query("DELETE FROM {variable} WHERE name LIKE 'calendar_%'");
+ cache_clear_all('variables', 'cache');
+ return $ret;
+}
+
+/**
+ * Make sure handlers for disabled Calendar iCal module don't get saved in the view.
+ */
+function calendar_update_6001() {
+ $ret = array();
+ // don't attempt to upgrade if views is not yet upgraded.
+ if (drupal_get_installed_schema_version('views', TRUE) < 6000) {
+ $ret = array();
+ drupal_set_message(t('Calendar module cannot be updated until after Views has been updated. Please return to update.php and run the remaining updates.', array('@update-php' => base_path() .'update.php?op=selection')), 'warning', FALSE);
+ $ret['#abort'] = array('success' => FALSE, 'query' => t('calendar.module has updates, but cannot be updated until views.module is updated first.'));
+
+ return $ret;
+ }
+ if (!module_exists('calendar_ical')) {
+ $ret[] = update_sql("DELETE FROM {views_display} WHERE display_plugin = 'ical'");
+ }
+ return $ret;
+}
+
+function calendar_update_6002() {
+ $ret = array();
+ // don't attempt to upgrade if views is not yet upgraded.
+ if (drupal_get_installed_schema_version('views', TRUE) < 6000) {
+ $ret = array();
+ drupal_set_message(t('Calendar module cannot be updated until after Views has been updated. Please return to update.php and run the remaining updates.', array('@update-php' => base_path() .'update.php?op=selection')), 'warning', FALSE);
+ $ret['#abort'] = array('success' => FALSE, 'query' => t('calendar.module has updates, but cannot be updated until views.module is updated first.'));
+
+ return $ret;
+ }
+ $periods = array(
+ 'calendar_month' => 'calendar_period_1',
+ 'calendar_year' => 'calendar_period_2',
+ 'calendar_day' => 'calendar_period_3',
+ 'calendar_week' => 'calendar_period_4',
+ 'calendar_block_view' => 'calendar_period_5',
+ );
+ $result = db_query("SELECT * FROM {views_display} d LEFT JOIN {views_view} v ON d.vid = v.vid");
+ drupal_load('module', 'views');
+ while ($row = db_fetch_array($result)) {
+ if (in_array($row['display_plugin'], array_keys($periods))) {
+ $id = $row['id'];
+ $options = unserialize($row['display_options']);
+ if ($row['display_plugin'] == 'calendar_block_view') {
+ $options['calendar_type'] = 'month';
+ $options['displays'] = array('calendar_1' => 0, 'default' => 0, 'calendar_block_1' => 'calendar_block_1');
+ }
+ else {
+ $options['calendar_type'] = str_replace('calendar_', '', $row['display_plugin']);
+ $options['displays'] = array('calendar_1' => 'calendar_1', 'default' => 0, 'calendar_block_1' => 0);
+ }
+ $row['id'] = $periods[$row['id']];
+ $row['display_plugin'] = 'calendar_period';
+ $row['display_options'] = serialize($options);
+ db_query("UPDATE {views_display} SET id='%s', display_plugin='%s', display_options='%s' WHERE id='%s'", $row['id'], $row['display_plugin'], $row['display_options'], $id);
+ }
+ elseif ($row['display_plugin'] == 'calendar' || $row['display_plugin'] == 'calendar_block') {
+ db_query("UPDATE {views_display} SET id='%s' WHERE id='%s'", $row['id'] .'_1', $row['id']);
+ }
+ db_query("DELETE FROM {views_object_cache} WHERE name = '%s'", $row['name']);
+ }
+ views_invalidate_cache();
+ $ret[] = array('success' => TRUE, 'query' => 'Updated calendar displays to use new handlers.');
+ return $ret;
+}
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar.module b/sites/all/modules/calendar/calendar.module
new file mode 100644
index 0000000..aa83ed1
--- /dev/null
+++ b/sites/all/modules/calendar/calendar.module
@@ -0,0 +1,921 @@
+ 2,
+ 'path' => drupal_get_path('module', 'calendar') .'/includes',
+ );
+}
+
+/**
+ * @file
+ * Adds calendar filtering and displays to Views.
+ */
+/**
+ * Implementation of hook_help().
+ */
+function calendar_help($section, $arg) {
+ switch ($section) {
+ case 'admin/help#calendar':
+ return t("
';
+ }
+}
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_ical/calendar_ical.views.inc b/sites/all/modules/calendar/calendar_ical/calendar_ical.views.inc
new file mode 100644
index 0000000..63a7b33
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/calendar_ical.views.inc
@@ -0,0 +1,82 @@
+ 'calendar_ical', // This just tells our themes are elsewhere.
+ 'display' => array(
+ // Parents are not really displays, just needed so the files can
+ // be included.
+ 'parent' => array(
+ 'no ui' => TRUE,
+ 'handler' => 'views_plugin_display',
+ 'path' => "$views_path/plugins",
+ 'parent' => '',
+ ),
+ 'page' => array(
+ 'no ui' => TRUE,
+ 'handler' => 'views_plugin_display_page',
+ 'path' => "$views_path/plugins",
+ 'parent' => 'parent',
+ ),
+ 'calendar_ical' => array(
+ 'title' => t('iCal feed'),
+ 'help' => t('Display the view as an iCal feed.'),
+ 'handler' => 'calendar_plugin_display_ical',
+ 'path' => "$path",
+ 'parent' => 'page',
+ 'uses hook menu' => TRUE,
+ 'theme' => 'views_view',
+ 'no ui' => TRUE,
+ 'no remove' => TRUE,
+ 'use ajax' => FALSE,
+ 'use pager' => FALSE,
+ 'accept attachments' => FALSE,
+ 'admin' => t('iCal feed'),
+ 'help topic' => 'display-ical',
+ ),
+ ),
+ 'style' => array(
+ 'parent' => array(
+ // this isn't really a display but is necessary so the file can
+ // be included.
+ 'no ui' => TRUE,
+ 'handler' => 'views_plugin_style',
+ 'path' => "$views_path/plugins",
+ 'parent' => '',
+ ),
+ 'rss' => array(
+ // this isn't really a display but is necessary so the file can
+ // be included.
+ 'no ui' => TRUE,
+ 'handler' => 'views_plugin_style_rss',
+ 'path' => "$views_path/plugins",
+ 'parent' => 'parent',
+ ),
+ 'ical' => array(
+ 'title' => t('iCal feed'),
+ 'help' => t('Generates an iCal feed from a view.'),
+ 'handler' => 'calendar_plugin_style_ical',
+ 'path' => "$path",
+ 'theme' => 'calendar_view_ical',
+ 'theme file' => 'theme.inc',
+ 'theme path' => "$path",
+ 'parent' => 'rss',
+ 'uses row plugin' => FALSE,
+ 'uses fields' => TRUE,
+ 'uses row plugin' => FALSE,
+ 'uses options' => TRUE,
+ 'type' => 'ical',
+ 'even empty' => TRUE,
+ ),
+ ),
+ );
+ return $data;
+}
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_ical/calendar_ical_admin.inc b/sites/all/modules/calendar/calendar_ical/calendar_ical_admin.inc
new file mode 100644
index 0000000..9595566
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/calendar_ical_admin.inc
@@ -0,0 +1,115 @@
+name] = array(
+ '#type' => 'select', '#title' => t('Expire iCal cache'),
+ '#default_value' => variable_get('calendar_ical_expire_'. $view->name, 9676800), '#options' => $period,
+ '#description' => t('iCal feeds are cached to improve performance. Set an expiration time for cached feeds.')
+ );
+
+ $empty_feed = array(0 => array('name' => '', 'url' => '', 'type' => 'ical', 'stripe' => 0));
+ $form[$view->name] = array(
+ '#type' => 'fieldset',
+ '#title' => t('iCal Feeds'),
+ '#description' => t('Use this section to set up iCal feeds that should be displayed in this calendar. They will be shown along with any internal items that match the calendar criteria.'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ '#tree' => TRUE,
+ );
+
+ // One empty input form will be added after any existing items.
+ $view_feeds = array_merge((array) variable_get('calendar_feeds_'. $view->name, $empty_feed), $empty_feed);
+ foreach ($view_feeds as $delta => $feed) {
+ $form[$view->name][$delta] = array(
+ 'type' => array(
+ '#title' => t('Feed type'),
+ '#type' => 'hidden',
+ '#value' => 'ical',
+ ),
+ 'name' => array(
+ '#title' => t('Name'),
+ '#type' => 'textfield',
+ '#default_value' => $feed['name'],
+ '#description' => t('The name of a feed to include in this calendar.'),
+ ),
+ 'url' => array(
+ '#title' => t('Url'),
+ '#type' => 'textarea',
+ '#rows' => 2,
+ '#default_value' => $feed['url'],
+ '#description' => t("The external feed url or internal file path and name. Change 'webcal://' to 'http://'."),
+ ),
+ 'calendar_colorpicker' => array(
+ '#type' => 'calendar_colorpicker',
+ '#title' => t('Stripe color'),
+ ),
+ 'stripe' => array(
+ '#type' => 'calendar_colorfield',
+ '#default_value' => isset($feed['stripe']) ? $feed['stripe'] : '#ffffff',
+ '#calendar_colorpicker' => $view_name .'-'. $delta .'-calendar-colorpicker',
+ '#description' => t("The hex color value (like #ffffff) to use for this feed's calendar stripe."),
+ ),
+ );
+ }
+ $form['view_name'] = array(
+ '#type' => 'hidden',
+ '#value' => $view->name,
+ );
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Submit'),
+ );
+ return $form;
+}
+
+/**
+ * Save requested values.
+ */
+function calendar_ical_setup_form_submit($form_id, $form_values) {
+ $view_name = $form_values['view_name'];
+ foreach ($form_values as $value_name => $value) {
+ if ($value_name == 'calendar_ical_expire_'. $view_name) {
+ variable_set('calendar_ical_expire_'. $view_name, $value);
+ }
+ elseif (is_array($value)) {
+ foreach ($value as $delta => $item) {
+ // Don't save empty values.
+ if (trim($item['url']) == '' || trim($item['name']) == '') {
+ unset($value[$delta]);
+ }
+ else {
+ // Replace 'webcal' protocol with http protocol.
+ $item['url'] = str_replace('webcal:', 'http:', $item['url']);
+ // Don't save invalid urls.
+ $events = date_ical_import($item['url']);
+ if (!is_array($events)) {
+ unset($value[$delta]);
+ }
+ else {
+ $value[$delta]['url'] = $item['url'];
+ }
+
+ }
+ }
+ variable_set('calendar_feeds_'. $value_name, $value);
+ }
+ }
+ cache_clear_all('calendar_feeds_'. $view->name, calendar_ical_cache(), TRUE);
+}
diff --git a/sites/all/modules/calendar/calendar_ical/calendar_plugin_display_ical.inc b/sites/all/modules/calendar/calendar_ical/calendar_plugin_display_ical.inc
new file mode 100644
index 0000000..02a6c71
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/calendar_plugin_display_ical.inc
@@ -0,0 +1,218 @@
+view->render();
+ if (empty($output)) {
+ return drupal_not_found();
+ }
+ print $output;
+ }
+
+ function preview() {
+ return '
' . check_plain($this->view->render()) . '
';
+ }
+
+ /**
+ * Instead of going through the standard views_view.tpl.php, delegate this
+ * to the style handler.
+ */
+ function render() {
+ return $this->view->style_plugin->render($this->view->result);
+ }
+
+ function defaultable_sections($section = NULL) {
+ if (in_array($section, array('style_options', 'style_plugin', 'row_options', 'row_plugin',))) {
+ return FALSE;
+ }
+
+ $sections = parent::defaultable_sections($section);
+
+ // Tell views our sitename_title option belongs in the title section.
+ if ($section == 'title') {
+ $sections[] = 'sitename_title';
+ }
+ elseif (!$section) {
+ $sections['title'][] = 'sitename_title';
+ }
+ return $sections;
+ }
+
+ function option_definition() {
+ $options = parent::option_definition();
+
+ $options['displays'] = array('default' => array());
+
+ // Overrides for standard stuff:
+ $options['style_plugin']['default'] = 'rss';
+ $options['style_options']['default'] = array('mission_description' => FALSE, 'description' => '');
+ $options['sitename_title']['default'] = FALSE;
+ $options['row_plugin']['default'] = '';
+ $options['defaults']['default']['style_plugin'] = FALSE;
+ $options['defaults']['default']['style_options'] = FALSE;
+ $options['defaults']['default']['row_plugin'] = FALSE;
+ $options['defaults']['default']['row_options'] = FALSE;
+
+ return $options;
+ }
+
+ function options_summary(&$categories, &$options) {
+ // It is very important to call the parent function here:
+ parent::options_summary($categories, $options);
+
+ // Since we're childing off the 'page' type, we'll still *call* our
+ // category 'page' but let's override it so it says feed settings.
+ $categories['page'] = array(
+ 'title' => t('iCal settings'),
+ );
+
+ if ($this->get_option('sitename_title')) {
+ $options['title']['value'] = t('Using the site name');
+ }
+
+ // I don't think we want to give feeds menus directly.
+ unset($options['menu']);
+
+ $displays = array_filter($this->get_option('displays'));
+ if (count($displays) > 1) {
+ $attach_to = t('Multiple displays');
+ }
+ else if (count($displays) == 1) {
+ $display = array_shift($displays);
+ if (!empty($this->view->display[$display])) {
+ $attach_to = $this->view->display[$display]->display_title;
+ }
+ }
+
+ if (!isset($attach_to)) {
+ $attach_to = t('None');
+ }
+
+ $options['displays'] = array(
+ 'category' => 'page',
+ 'title' => t('Attach to'),
+ 'value' => $attach_to,
+ );
+ }
+
+ /**
+ * Provide the default form for setting options.
+ */
+ function options_form(&$form, &$form_state) {
+ // It is very important to call the parent function here.
+ parent::options_form($form, $form_state);
+
+ switch ($form_state['section']) {
+ case 'title':
+ $title = $form['title'];
+ // A little juggling to move the 'title' field beyond our checkbox.
+ unset($form['title']);
+ $form['sitename_title'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Use the site name for the title'),
+ '#default_value' => $this->get_option('sitename_title'),
+ );
+ $form['title'] = $title;
+ $form['title']['#process'] = array('views_process_dependency');
+ $form['title']['#dependency'] = array('edit-sitename-title' => array(FALSE));
+ break;
+ case 'displays':
+ $form['#title'] .= t('Attach to');
+ $displays = array();
+ foreach ($this->view->display as $display_id => $display) {
+ if (!empty($display->handler) && $display->handler->accept_attachments()) {
+ $displays[$display_id] = $display->display_title;
+ }
+ }
+ $form['displays'] = array(
+ '#type' => 'checkboxes',
+ '#description' => t('The ical icon will be shown only on the selected displays.'),
+ '#options' => $displays,
+ '#default_value' => $this->get_option('displays'),
+ );
+ break;
+ case 'path':
+ $form['path']['#description'] = t('This view will be displayed by visiting this path on your site. It is recommended that the path be something like "path/%/%/ical", putting one % in the path for each argument you have defined in the view.');
+ break;
+ }
+ }
+
+ /**
+ * Perform any necessary changes to the form values prior to storage.
+ * There is no need for this function to actually store the data.
+ */
+ function options_submit($form, &$form_state) {
+ // It is very important to call the parent function here:
+ parent::options_submit($form, $form_state);
+ switch ($form_state['section']) {
+ case 'title':
+ $this->set_option('sitename_title', $form_state['values']['sitename_title']);
+ break;
+ case 'displays':
+ $this->set_option($form_state['section'], $form_state['values'][$form_state['section']]);
+ break;
+ }
+ }
+
+ /**
+ * Attach to another view.
+ */
+ function attach_to($display_id) {
+ $displays = $this->get_option('displays');
+ if (empty($displays[$display_id])) {
+ return;
+ }
+
+ // Defer to the feed style; it may put in meta information, and/or
+ // attach a feed icon.
+ $plugin = $this->get_plugin();
+ if ($plugin) {
+ $clone = $this->view->clone_view();
+ $clone->set_display($this->display->id);
+ $clone->build_title();
+ $plugin->attach_to($display_id, $this->get_path(), $clone->get_title());
+ }
+ }
+
+ /**
+ * Display validation.
+ */
+ function validate() {
+ $errors = parent::validate();
+
+ $arguments = $this->display->handler->get_option('arguments');
+ $filters = $this->display->handler->get_option('filters');
+
+ if (!array_key_exists('date_argument', $arguments) && !array_key_exists('date_filter', $filters)) {
+ if (empty($this->view->date_info->arg_missing)) {
+ $errors[] = t("A Calendar period display will not work without a Date argument or a Date filter.");
+ }
+ $this->view->date_info->arg_missing = TRUE;
+ }
+ if (array_key_exists('date_argument', $arguments) &&
+ ($arguments['date_argument']['default_action'] != 'default' || $arguments['date_argument']['default_argument_type'] != 'date')) {
+ if (empty($this->view->date_info->arg_missing_default)) {
+ $errors[] = calendar_errors('missing_argument_default');
+ }
+ $this->view->date_info->arg_missing_default = TRUE;
+ }
+
+ return $errors;
+ }
+}
+
diff --git a/sites/all/modules/calendar/calendar_ical/calendar_plugin_style_ical.inc b/sites/all/modules/calendar/calendar_ical/calendar_plugin_style_ical.inc
new file mode 100644
index 0000000..f8ddd32
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/calendar_plugin_style_ical.inc
@@ -0,0 +1,254 @@
+handler->default_display->options['fields'];
+ $this->options['fields'] = $fields;
+ }
+
+ function query() {
+ // We need these values for the iCal feed.
+ $this->view->query->add_field('node', 'title');
+ $this->view->query->add_field('node', 'type');
+ parent::query();
+ }
+
+ function attach_to($display_id, $path, $title) {
+ $display = $this->view->display[$display_id]->handler;
+ $url_options = array();
+ $input = $this->view->get_exposed_input();
+ if ($input) {
+ $url_options['query'] = $input;
+ }
+
+ // TODO adjust this to pick up default values when no arg is set?
+ $url = url($this->view->get_url(NULL, $path), $url_options);
+ if (empty($this->view->feed_icon)) {
+ $this->view->feed_icon = '';
+ }
+ $this->view->feed_icon .= theme('calendar_ical_icon', $url);
+
+ drupal_add_link(array(
+ 'rel' => 'alternate',
+ 'type' => 'application/calendar',
+ 'title' => $title,
+ 'href' => $url
+ ));
+ }
+
+ /**
+ * Set default options
+ */
+ function options(&$options) {
+ parent::options($options);
+ $options['summary_field'] = 'title';
+ $options['description_field'] = '';
+ $options['location_field'] = '';
+ $options['fields'] = array();
+ }
+
+ function option_definition() {
+ $options = parent::option_definition();
+
+ $options['summary_field'] = array('default' => '', 'translatable' => TRUE);
+ $options['description_field'] = array('default' => '', 'translatable' => TRUE);
+ $options['location_field'] = array('default' => '', 'translatable' => TRUE);
+
+ return $options;
+ }
+
+ function options_form(&$form, &$form_state) {
+ $options = array('' => '');
+ foreach ($this->options['fields'] as $field) {
+ $handler = views_get_handler($field['table'], $field['field'], 'field');
+ $options[$field['field']] = $handler->ui_name();
+ }
+ $form['#prefix'] = '
'. t("Map the View fields to the values they should represent in the iCal feed. Only fields that have been added to the view are available to use in this way. You can add additional fields to the view and mark them 'Exclude from display' if you only want them in the iCal feed.") .'
';
+
+ $form['summary_field'] = array(
+ '#type' => 'select',
+ '#title' => t('Title'),
+ '#default_value' => !empty($this->options['summary_field']) ? $this->options['summary_field'] : 'title',
+ '#options' => $options,
+ '#required' => TRUE,
+ );
+ $form['description_field'] = array(
+ '#type' => 'select',
+ '#title' => t('Description'),
+ '#default_value' => $this->options['description_field'],
+ '#options' => $options,
+ );
+ $form['location_field'] = array(
+ '#type' => 'select',
+ '#title' => t('Location'),
+ '#default_value' => $this->options['location_field'],
+ '#options' => $options,
+ );
+
+ }
+
+ /**
+ * Style validation.
+ */
+ function validate() {
+ $errors = parent::validate();
+
+ $style = $this->display->display_options['style_plugin'];
+
+ $arguments = $this->display->handler->get_option('arguments');
+ $filters = $this->display->handler->get_option('filters');
+
+ if (!array_key_exists('date_argument', $arguments) && !array_key_exists('date_filter', $filters)) {
+ if (empty($this->view->date_info->arg_missing)) {
+ $errors[$style] = t("The @style style requires a Date argument or a Date filter.", array('@style' => $style));
+ }
+ $this->view->date_info->arg_missing = TRUE;
+ }
+ if (array_key_exists('date_argument', $arguments) &&
+ ($arguments['date_argument']['default_action'] != 'default' || $arguments['date_argument']['default_argument_type'] != 'date')) {
+ if (empty($this->view->date_info->arg_missing_default)) {
+ $errors[] = calendar_errors('missing_argument_default');
+ }
+ $this->view->date_info->arg_missing_default = TRUE;
+ }
+
+ if (empty($this->options['summary_field'])) {
+ $errors[] = $errors[$style] = t("The @style style requires a Title field for the iCal export.", array('@style' => $style));
+ }
+ // Make sure date fields are not set up to 'Group multiple values'
+ // in the calendar style.
+ if ($style == 'calendar_style') {
+ $view_fields = date_api_fields($this->view->base_table);
+ $view_fields = $view_fields['name'];
+ $fields = $this->display->handler->get_option('fields');
+ foreach ($fields as $column => $field) {
+ $field_name = $field['table'] .".". $field['field'];
+ if (!empty($field['multiple'])) {
+ $cck_fields = content_fields();
+ $real_name = $view_fields[$field_name]['real_field_name'];
+ if ($cck_fields[$real_name]['multiple'] && !empty($field['multiple']['group'])) {
+ $errors[] = t("The date field '@field' used by the display '@display_title' cannot be set to 'Group multiple values'.", array('@field' => $view_fields[$field_name]['label'], '@display_title' => $this->display->display_title));
+ }
+ }
+ }
+ }
+ return $errors;
+ }
+
+ function render() {
+ require_once('./'. drupal_get_path('module', 'calendar') .'/includes/calendar.inc');
+
+ // Transfer the style options to the view object so they
+ // can be easily accessed in the theme.
+ $style_options = $this->options;
+ $this->view->date_info->summary_field = $style_options['summary_field'];
+ $this->view->date_info->description_field = $style_options['description_field'];
+ $this->view->date_info->location_field = $style_options['location_field'];
+
+ // Evaluate our argument values and figure out which
+ // calendar display we need to create.
+ $i = 0;
+ foreach ($this->view->argument as $id => $argument) {
+ if ($argument->field == 'date_argument') {
+ // TODO Decide if we want to provide a date here or not.
+ // Adding this now is to prevent fatal errors later if the
+ // view is used in unexpected ways without a date being set.
+ if (empty($argument->min_date)) {
+ $value = $argument->get_default_argument();
+ $range = $argument->date_handler->arg_range($value);
+ $argument->min_date = $range[0];
+ $argument->max_date = $range[1];
+ }
+ $this->view->date_info->granularity = !empty($argument->granularity) ? $argument->granularity : $argument->options['granularity'];
+ $this->view->date_info->date_arg = !empty($this->view->args) ? $this->view->args[$argument->position] : '';
+ $this->view->date_info->date_arg_pos = $i;
+ $this->view->date_info->year = isset($argument->year) ? $argument->year : NULL;
+ $this->view->date_info->month = isset($argument->month) ? $argument->month: NULL;
+ $this->view->date_info->day = isset($argument->day) ? $argument->day : NULL;
+ $this->view->date_info->week = isset($argument->week) ? $argument->week : NULL;
+ $this->view->date_info->min_date = $argument->min_date;
+ $this->view->date_info->max_date = $argument->max_date;
+
+ // Stop after the first date argument, if there is more than one.
+ break;
+ }
+ $i++;
+ }
+
+ // The ical display might have date filters instead of arguments.
+ // If we missed getting a min date from date arguments, try date filters.
+ if (empty($this->view->date_info->min_date)) {
+ foreach ($this->view->filter as $id => $filter) {
+ if ($filter->field == 'date_filter') {
+ // TODO Decide if we want to provide a date here or not.
+ // Adding this now is to prevent fatal errors later if the
+ // view is used in unexpected ways without a date being set.
+ if (empty($filter->min_date)) {
+ $value = $filter->default_value('value');
+ $range = $filter->date_handler->arg_range($value);
+ $filter->min_date = $range[0];
+ $filter->max_date = $range[1];
+ }
+ $this->view->date_info->granularity = !empty($filter->granularity) ? $filter->granularity : $filter->options['granularity'];
+ $this->view->date_info->year = isset($filter->year) ? $filter->year : NULL;
+ $this->view->date_info->month = isset($filter->month) ? $filter->month: NULL;
+ $this->view->date_info->day = isset($filter->day) ? $filter->day : NULL;
+ $this->view->date_info->week = isset($filter->week) ? $filter->week : NULL;
+ $this->view->date_info->min_date = $filter->min_date;
+ $this->view->date_info->max_date = $filter->max_date;
+ if (empty($this->view->date_info->date_fields)) {
+ $this->view->date_info->date_fields = array();
+ }
+ $this->view->date_info->date_fields = array_merge($this->view->date_info->date_fields, array_keys($filter->options['date_fields']));
+
+ // Stop after the first date filter, if there is more than one.
+ break;
+ }
+ }
+ $i++;
+ }
+
+ // Render each field into an output array.
+ $items = array();
+ $calendar_fields = date_api_fields($this->view->base_table);
+ $calendar_fields = array_keys($calendar_fields['alias']);
+
+ foreach ($this->view->result as $num => $row) {
+ $items[$num] = $row;
+ // Store the raw date values before formatting the results.
+ foreach ($row as $key => $value) {
+ if (in_array($key, $calendar_fields)) {
+ $items[$num]->calendar_fields->$key = $value;
+ }
+ }
+ foreach ($this->view->field as $name => $field) {
+ // Some fields, like the node edit and delete links, have no alias.
+ $field_alias = $field->field_alias != 'unknown' ? $field->field_alias : $name;
+ if (!empty($field) && is_object($field)) {
+ $field_output = $field->theme($row);
+ $items[$num]->{$field_alias} = $field_output;
+ }
+ }
+ }
+
+ // Massage the resulting items into formatted calendar items.
+ $items = calendar_build_nodes($this->view, $items);
+
+ // Merge in items from other sources.
+ foreach (module_implements('calendar_add_items') as $module) {
+ $function = $module .'_calendar_add_items';
+ if (function_exists($function)) {
+ if ($feeds = $function($this->view)) {
+ foreach ($feeds as $feed) {
+ $items = $feed;
+ }
+ }
+ }
+ }
+ return theme($this->theme_functions(), $this->view, $this->options, $items);
+ }
+}
diff --git a/sites/all/modules/calendar/calendar_ical/theme.inc b/sites/all/modules/calendar/calendar_ical/theme.inc
new file mode 100644
index 0000000..a867437
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/theme.inc
@@ -0,0 +1,81 @@
+style_plugin;
+
+ // Figure out which display which has a path we're using for this feed. If there isn't
+ // one, use the global $base_url
+ $link_display = $view->display_handler->get_link_display();
+
+ // Compare the link to the default home page; if it's the default home page, just use $base_url.
+ if (empty($vars['link'])) {
+ $vars['link'] = $base_url;
+ }
+
+ // Keep devel module from appending queries to ical export.
+ $GLOBALS['devel_shutdown'] = FALSE;
+
+ drupal_set_header('Content-Type: text/calendar; charset=utf-8');
+ drupal_set_header('Content-Disposition: attachment; filename="calendar.ics"; ');
+ require_once('./'. drupal_get_path('module', 'date_api') .'/date_api_ical.inc');
+ require_once('./'. drupal_get_path('module', 'date_api') .'/theme/theme.inc');
+ require_once('./'. drupal_get_path('module', 'calendar') .'/includes/calendar.inc');
+
+ $events = array();
+ // Get the alias name for each of our data fields.
+ foreach ($view->field as $name => $field) {
+ // Some fields, like the node edit and delete links, have no alias.
+ $field_alias = $field->field_alias != 'unknown' ? $field->field_alias : $name;
+ foreach (array('summary_field', 'description_field', 'location_field') as $data) {
+ if ($field->field == $view->date_info->$data) {
+ $$data = $field_alias;
+ }
+ }
+ }
+ // A summary field is required, default to the title.
+ if (empty($summary_field) || $summary_field == 'node_title') {
+ $summary_field = 'title';
+ }
+ foreach ($items as $node) {
+ // We cannot process an event that is missing the summary info.
+ if (empty($node->$summary_field)) {
+ continue;
+ }
+ // Allow modules to affect item fields
+ node_invoke_nodeapi($node, 'ical item');
+ unset($node->view);
+ $rrule_field = str_replace(array('_value2', '_value'), '_rrule', $node->datefield);
+ $event = array();
+ $event['summary'] = strip_tags($node->$summary_field);
+ $event['start'] = $node->calendar_start_date;
+ $event['end'] = $node->calendar_end_date;
+ $event['description'] = !empty($description_field) && !empty($node->$description_field) ? $node->$description_field : '';
+ $event['location'] = !empty($location_field) && !empty($node->$location_field) ? $node->$location_field : '';
+ $event['url'] = !empty($node->url) ? $node->url : (is_numeric($node->nid) ? url("node/$node->nid", array('absolute' => TRUE)) : $node->nid);
+ $event['uid'] = !empty($node->date_id) ? $node->date_id : $event['url'];
+ $event['rrule'] = !empty($rrule_field) && !empty($node->$rrule_field) ? $node->$rrule_field : '';
+ $events[$event['uid']] = $event;
+
+ /* force UTC timezone */
+ date_timezone_set($event['start'], timezone_open('UTC'));
+ date_timezone_set($event['end'], timezone_open('UTC'));
+ }
+
+ $headertitle = filter_xss_admin($view->get_title());
+ $title = variable_get('site_name', 'Drupal');
+ $description = $headertitle . ($title ? ' | '. $title : '');
+
+ $vars['calname'] = $description;
+ $vars['events'] = $events;
+ template_preprocess_date_vcalendar($vars);
+}
diff --git a/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.cs.po b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.cs.po
new file mode 100644
index 0000000..4d943a2
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.cs.po
@@ -0,0 +1,117 @@
+# $Id: calendar_ical.cs.po,v 1.1.2.1 2010/10/22 20:06:37 wojtha Exp $
+#
+# Czech translation of Calendar (6.x-2.2)
+# Copyright (c) 2010 by the Czech translation team
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Calendar (6.x-2.2)\n"
+"POT-Creation-Date: 2010-10-22 20:03+0000\n"
+"PO-Revision-Date: 2010-10-07 16:49+0000\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n"
+
+msgid "Title"
+msgstr "Nadpis"
+msgid "Submit"
+msgstr "Uložit"
+msgid "Description"
+msgstr "Popis"
+msgid "Name"
+msgstr "Jméno"
+msgid "Url"
+msgstr "Url"
+msgid "Location"
+msgstr "Místo"
+msgid "Feed type"
+msgstr "Typ zdroje"
+msgid "Expire iCal cache"
+msgstr "Expirace iCal mezipaměti."
+msgid ""
+"iCal feeds are cached to improve performance. Set an expiration time "
+"for cached feeds."
+msgstr ""
+"Pro zlepšení výkonu jsou iCal zdroje ukládány do mezipaměti. "
+"Nastavte čas expirace."
+msgid "iCal Feeds"
+msgstr "iCal zdroje (Feeds)"
+msgid ""
+"Use this section to set up iCal feeds that should be displayed in this "
+"calendar. They will be shown along with any internal items that match "
+"the calendar criteria."
+msgstr ""
+"Tato sekce slouží pro nastavení iCal zdrojů, které budou v "
+"kalendáři zobrazeny. Data načtená ze zdrojů budou součástí "
+"všech interních položek, které odpovídají kritériím "
+"kalendáře."
+msgid "The name of a feed to include in this calendar."
+msgstr "Název zdroje, který má být zahrnut do kalendáře."
+msgid ""
+"The external feed url or internal file path and name. Change "
+"'webcal://' to 'http://'."
+msgstr ""
+"URL externího zdroje nebo interní cesta a jméno souboru. Změňte "
+"'webcal://' na 'http://'."
+msgid "Add to calendar"
+msgstr "Přidat do kalendáře"
+msgid "Calendar iCal"
+msgstr "Kalendář iCal"
+msgid "Attach to"
+msgstr "Přiložit k"
+msgid "Stripe color"
+msgstr "Barva pruhu"
+msgid ""
+"The hex color value (like #ffffff) to use for this feed's calendar "
+"stripe."
+msgstr ""
+"Barva v šestnáctkovém zápisu (např. #ffffff), která se má "
+"použít pro tento pruh."
+msgid "Adds ical functionality to Calendar views."
+msgstr "Přidá podporu iCal zdrojů do kalendářových pohledů."
+msgid "Multiple displays"
+msgstr "Více zobrazení"
+msgid "Using the site name"
+msgstr "Použití jména webu"
+msgid "Use the site name for the title"
+msgstr "Jako název použít název webu"
+msgid "iCal feed"
+msgstr "iCal zdroj"
+msgid "Display the view as an iCal feed."
+msgstr "Zobrazit výstup z pohledu jako iCal zdroj."
+msgid "Generates an iCal feed from a view."
+msgstr "Jako výstup z pohledu generovat iCal zdroj."
+msgid "iCal settings"
+msgstr "Nastavení pro iCal"
+msgid "The ical icon will be shown only on the selected displays."
+msgstr "Ikona ical bude viditelná pouze u vybraných zobrazení."
+msgid ""
+"This view will be displayed by visiting this path on your site. It is "
+"recommended that the path be something like \"path/%/%/ical\", putting "
+"one % in the path for each argument you have defined in the view."
+msgstr ""
+"Na zde definované adrese bude zobrazen konfigurovaný pohled. Je "
+"vhodné, aby adresa měla tvar \"path/%/%/ical\", kde % reprezentuje "
+"jednotlivé argumenty."
+msgid ""
+"A Calendar period display will not work without a Date argument or a "
+"Date filter."
+msgstr ""
+"Pokud nebude definován argument s datumem nebo datumový filtr, potom "
+"nebude zobrazení časového intervalu (period display) pracovat."
+msgid ""
+"Map the View fields to the values they should represent in the iCal "
+"feed. Only fields that have been added to the view are available to "
+"use in this way. You can add additional fields to the view and mark "
+"them 'Exclude from display' if you only want them in the iCal feed."
+msgstr ""
+"Namapujte hodnoty z iCal zdroje na relevantní pole. Mapovat lze pouze "
+"ta pole, která byla přidána v konfiguraci pohledu (view). Pokud si "
+"přejete pracovat s poli pouze v rámci mapování s výhodou můžete "
+"použít volby 'nezobrazovat' ('Exclude from display')."
+msgid "The @style style requires a Date argument or a Date filter."
+msgstr "Styl @style vyžaduje argument nebo filtr typu \"datum\"."
+msgid "The @style style requires a Title field for the iCal export."
+msgstr "Styl @style vyžaduje pole 'Nadpis' pro iCal export."
diff --git a/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.hu.po b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.hu.po
new file mode 100644
index 0000000..fb1716a
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.hu.po
@@ -0,0 +1,70 @@
+# Hungarian translation of Calendar (all releases)
+# Copyright (c) 2009 by the Hungarian translation team
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Calendar (all releases)\n"
+"POT-Creation-Date: 2009-11-10 16:39+0000\n"
+"PO-Revision-Date: 2009-11-10 14:07+0000\n"
+"Language-Team: Hungarian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+msgid "Title"
+msgstr "Cím"
+msgid "Description"
+msgstr "Leírás"
+msgid "Location"
+msgstr "Hely"
+msgid "Attach to"
+msgstr "Csatolás ehhez"
+msgid "Multiple displays"
+msgstr "Öszzetett képernyők"
+msgid "Using the site name"
+msgstr "Használva a webhely nevét"
+msgid "Use the site name for the title"
+msgstr "A webhely nevét használja címnek"
+msgid "iCal feed"
+msgstr "iCal hírcsatorna"
+msgid "Display the view as an iCal feed."
+msgstr "Nézet megjelenítése iCal hírcsatornaként."
+msgid "Generates an iCal feed from a view."
+msgstr "iCal hírcsatorna előállítása nézetből."
+msgid "iCal settings"
+msgstr "iCal beállításai"
+msgid "The ical icon will be shown only on the selected displays."
+msgstr "Az ical ikon csak a kiválasztott képernyőkön fog megjelenni."
+msgid ""
+"This view will be displayed by visiting this path on your site. It is "
+"recommended that the path be something like \"path/%/%/ical\", putting "
+"one % in the path for each argument you have defined in the view."
+msgstr ""
+"Ez a nézet ezen az útvonalon lesz megtekinthető az oldalon. "
+"Javasolt az elérési út „path/%/%/ical” szerű megadása, "
+"egy-egy % jelet elhelyezve az elérési útban minden, a nézetben "
+"meghatározott argumentumhoz."
+msgid ""
+"A Calendar period display will not work without a Date argument or a "
+"Date filter."
+msgstr ""
+"Naptári időszak képernyő nem működik egy Dátum argumentum vagy "
+"egy Dátum szűrő nélkül."
+msgid ""
+"Map the View fields to the values they should represent in the iCal "
+"feed. Only fields that have been added to the view are available to "
+"use in this way. You can add additional fields to the view and mark "
+"them 'Exclude from display' if you only want them in the iCal feed."
+msgstr ""
+"Leképezi a View mezőket az iCal hírcsatornában ábrázolandó "
+"értékekre. Ezen a módon csak a nézethez hozzáadott mezők lesznek "
+"elérhetőek. További mezőket lehet hozzáadni a nézethez, amiket "
+"„Megjelenítésből kizárt”-nak kell jelölni, ha azokat csak az "
+"iCal hírcsatornában kívánjuk megjeleníteni."
+msgid "The @style style requires a Date argument or a Date filter."
+msgstr ""
+"@style stílushoz szükséges egy Dátum argumentum vagy egy Dátum "
+"szűrő."
+msgid "The @style style requires a Title field for the iCal export."
+msgstr "@style stílusnak szüksége van egy Cím mezőre az iCal exporthoz."
diff --git a/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.pot b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.pot
new file mode 100644
index 0000000..0d1565e
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_ical/translations/calendar_ical.pot
@@ -0,0 +1,169 @@
+# $Id: calendar_ical.pot,v 1.1.2.2 2009/02/17 11:06:21 karens Exp $
+#
+# LANGUAGE translation of Drupal (general)
+# Copyright YEAR NAME
+# Generated from files:
+# calendar_ical.views.inc,v 1.1.2.6 2009/02/16 23:46:22 karens
+# calendar_ical_admin.inc,v 1.1.2.2 2008/10/02 20:23:49 karens
+# calendar_plugin_display_ical.inc,v 1.1.2.5 2008/11/25 16:12:36 karens
+# calendar_plugin_style_ical.inc,v 1.1.2.13 2009/02/16 11:39:37 karens
+# calendar_ical.module,v 1.1.2.6 2008/11/24 15:48:15 karens
+# calendar_ical.info,v 1.1.2.1 2008/09/05 11:03:42 karens
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2009-02-17 05:03-0600\n"
+"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
+"Last-Translator: NAME \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: calendar_ical.views.inc:30;42;64
+msgid "iCal feed"
+msgstr ""
+
+#: calendar_ical.views.inc:31
+msgid "Display the view as an iCal feed."
+msgstr ""
+
+#: calendar_ical.views.inc:65
+msgid "Generates an iCal feed from a view."
+msgstr ""
+
+#: calendar_ical_admin.inc:22
+msgid "Expire iCal cache"
+msgstr ""
+
+#: calendar_ical_admin.inc:24
+msgid "iCal feeds are cached to improve performance. Set an expiration time for cached feeds."
+msgstr ""
+
+#: calendar_ical_admin.inc:30
+msgid "iCal Feeds"
+msgstr ""
+
+#: calendar_ical_admin.inc:31
+msgid "Use this section to set up iCal feeds that should be displayed in this calendar. They will be shown along with any internal items that match the calendar criteria."
+msgstr ""
+
+#: calendar_ical_admin.inc:42
+msgid "Feed type"
+msgstr ""
+
+#: calendar_ical_admin.inc:47
+msgid "Name"
+msgstr ""
+
+#: calendar_ical_admin.inc:50
+msgid "The name of a feed to include in this calendar."
+msgstr ""
+
+#: calendar_ical_admin.inc:53
+msgid "Url"
+msgstr ""
+
+#: calendar_ical_admin.inc:57
+msgid "The external feed url or internal file path and name. Change 'webcal://' to 'http://'."
+msgstr ""
+
+#: calendar_ical_admin.inc:61
+msgid "Stripe color"
+msgstr ""
+
+#: calendar_ical_admin.inc:67
+msgid "The hex color value (like #ffffff) to use for this feed's calendar stripe."
+msgstr ""
+
+#: calendar_ical_admin.inc:77
+msgid "Submit"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:81
+msgid "iCal settings"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:85
+msgid "Using the site name"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:93
+msgid "Multiple displays"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:103
+msgid "None"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:108;135
+msgid "Attach to"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:127
+msgid "Use the site name for the title"
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:144
+msgid "The ical icon will be shown only on the selected displays."
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:150
+msgid "This view will be displayed by visiting this path on your site. It is recommended that the path be something like \"path/%/%/ical\", putting one % in the path for each argument you have defined in the view."
+msgstr ""
+
+#: calendar_plugin_display_ical.inc:203
+msgid "A Calendar period display will not work without a Date argument or a Date filter."
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:70
+msgid "Map the View fields to the values they should represent in the iCal feed. Only fields that have been added to the view are available to use in this way. You can add additional fields to the view and mark them 'Exclude from display' if you only want them in the iCal feed."
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:74
+msgid "Title"
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:81
+msgid "Description"
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:87
+msgid "Location"
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:107
+msgid "The @style style requires a Date argument or a Date filter."
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:120
+msgid "The @style style requires a Title field for the iCal export."
+msgstr ""
+
+#: calendar_plugin_style_ical.inc:134
+msgid "The date field '@field' used by the display '@display_title' cannot be set to 'Group multiple values'."
+msgstr ""
+
+#: calendar_ical.module:29;29
+msgid "Add to calendar"
+msgstr ""
+
+#: calendar_ical.module:0
+msgid "calendar_ical"
+msgstr ""
+
+#: calendar_ical.info:0
+msgid "Calendar iCal"
+msgstr ""
+
+#: calendar_ical.info:0
+msgid "Adds ical functionality to Calendar views."
+msgstr ""
+
+#: calendar_ical.info:0
+msgid "Date/Time"
+msgstr ""
+
diff --git a/sites/all/modules/calendar/calendar_multiday/calendar-overlap.css b/sites/all/modules/calendar/calendar_multiday/calendar-overlap.css
new file mode 100644
index 0000000..3f669df
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/calendar-overlap.css
@@ -0,0 +1,803 @@
+/** Overlapping week items **/
+.calendar-calendar tr.holder {
+ height : 0px;
+ display: table-row !important;
+ display : none;
+}
+
+.calendar-calendar .week-view .full div.item-wrapper,
+.calendar-calendar .day-view .full div.item-wrapper {
+ background-color: none;
+ border:0px;
+ float:none;
+ margin:0px;
+ width : 100%;
+ margin-top : -24px;
+}
+
+.calendar-calendar td .inner div,
+.calendar-calendar td .inner div a {
+ background : none;
+}
+
+.calendar-calendar .week-view .full div.single-day div.weekview,
+.calendar-calendar .day-view .full div.single-day div.dayview {
+ background : #FFD8C0;
+ width : auto;
+ padding : 0px 3px;
+ overflow : hidden;
+}
+
+.calendar-calendar .week-view .full div.single-day div.weekview,
+.calendar-calendar .day-view .full div.single-day div.dayview {
+ border : 1px solid #E39364;
+}
+
+
+.calendar-calendar .week-view .header-body-divider,
+.calendar-calendar .week-view .single-day-footer,
+.calendar-calendar .day-view .single-day-footer,
+.calendar-calendar .day-view .header-body-divider {
+ background : #eeeeee;
+ border-left : 1px solid #CCCCCC;
+ border-right : 1px solid #CCCCCC;
+ font-size : 1px;
+ height : 4px;
+ line-height : 1px;
+}
+
+.calendar-calendar .week-view #multi-day-container,
+.calendar-calendar .week-view #single-day-container,
+.calendar-calendar .day-view #multi-day-container,
+.calendar-calendar .day-view #single-day-container {
+ position : relative;
+ background : #ffffff;
+ overflow-y : scroll;
+ overflow-x : hidden;
+ border-left : 1px solid #CCCCCC;
+ border-bottom : 1px solid #CCCCCC;
+}
+
+.calendar-calendar .week-view #multi-day-container,
+.calendar-calendar .day-view #multi-day-container {
+ border-top : 1px solid #CCCCCC;
+}
+
+.calendar-calendar .week-view #week-header-container,
+.calendar-calendar .day-view #day-header-container {
+ width : 100%;
+ background : #ffffff;
+ border-bottom : 1px solid #CCCCCC;
+}
+
+.calendar-calendar .week-view #multi-day-container,
+.calendar-calendar .day-view #multi-day-container {
+ height : 57px;
+}
+
+.calendar-calendar .week-view #multi-day-container .expand {
+ height : 100%;
+}
+
+.calendar-calendar .week-view #multi-day-container table,
+.calendar-calendar .day-view #multi-day-container table {
+ height : 100%;
+}
+
+.calendar-calendar .week-view #multi-day-container table td,
+.calendar-calendar .day-view #multi-day-container table td {
+ border-top : 0px;
+ border-bottom : 0px;
+ vertical-align : top;
+}
+
+.calendar-calendar .week-view #single-day-container,
+.calendar-calendar .day-view #single-day-container {
+ border-top : 1px solid #CCCCCC;
+ height : 500px;
+}
+
+.calendar-calendar .week-view #single-day-container table td,
+.calendar-calendar .day-view #single-day-container table td {
+ padding : 0px;
+ border-top : 0px;
+ border-bottom : 0px;
+}
+
+.calendar-calendar .week-view #single-day-container table td.first,
+.calendar-calendar .day-view #single-day-container table td.first {
+ border-left : 0px;
+}
+
+.calendar-calendar .week-view #single-day-container table td.last,
+.calendar-calendar .day-view #single-day-container table td.last {
+ border-right : 0px;
+}
+
+.calendar-calendar .week-view #single-day-container div.first,
+.calendar-calendar .day-view #single-day-container div.first {
+ border-top : 0px;
+}
+
+.calendar-calendar .week-view #single-day-container div.last,
+.calendar-calendar .day-view #single-day-container div.last {
+ border-bottom : 0px;
+}
+
+.calendar-calendar .week-view table.full {
+ table-layout : fixed;
+ width : 925px;
+ margin : 0px;
+}
+
+.calendar-calendar .day-view table.full {
+ table-layout : fixed;
+ width : 923px;
+ margin : 0px;
+}
+
+.calendar-calendar td.calendar-agenda-hour .calendar-hour,
+.calendar-calendar td.calendar-agenda-hour .calendar-ampm,
+.calendar-calendar .week-view .full div.calendar-agenda-hour span,
+.calendar-calendar .day-view .full div.calendar-agenda-hour span {
+ font-size : .8em;
+ font-weight : normal;
+ margin-right: 0px;
+}
+
+.calendar-calendar .week-view .full div.calendar-agenda-hour,
+.calendar-calendar .day-view .full div.calendar-agenda-hour,
+.calendar-calendar .week-view .full div.calendar-agenda-items,
+.calendar-calendar .day-view .full div.calendar-agenda-items {
+ width : 100%;
+ height : 47px;
+ border-top : 1px solid #cccccc;
+}
+
+.calendar-calendar .week-view .full .calendar-agenda-hour div,
+.calendar-calendar .day-view .full .calendar-agenda-hour div {
+ margin-top : 10px;
+}
+
+.calendar-calendar .day-view .full td.calendar-time-holder,
+.calendar-calendar .week-view .full td.calendar-time-holder {
+ width : 50px;
+ padding : 0px;
+ border : 0px;
+}
+
+.calendar-calendar .week-view .full td.calendar-day-holder {
+ padding : 0px;
+ border : 0px;
+ width : 125px;
+}
+
+.calendar-calendar .day-view .full td.calendar-day-holder {
+ padding : 0px;
+ border : 0px;
+ width : 873px;
+}
+
+.calendar-calendar .week-view .full div.single-day,
+.calendar-calendar .day-view .full div.single-day {
+ padding : 0px;
+}
+
+.calendar-calendar .week-view .full div.single-day .inner,
+.calendar-calendar .day-view .full div.single-day .inner {
+ position : absolute;
+ z-index : 1;
+}
+
+.calendar-calendar .week-view .full td.multi-day {
+ padding : 1px 2px 0px 2px;
+}
+
+.calendar-calendar .day-view .full td.multi-day div.dayview,
+.calendar-calendar .week-view .full td.multi-day div.weekview {
+ height : 22px !important;
+}
+
+.calendar-calendar .day-view .full td.multi-day .calendar.dayview .view-field,
+.calendar-calendar .week-view .full td.multi-day .calendar.weekview .view-field {
+ display : inline;
+}
+
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continuation {
+ height : 22px;
+ padding-top: 0px;
+ margin-right : 3px;
+}
+
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continues,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .cutoff,
+.calendar-calendar .day-view .full td.multi-day .inner .dayview .continues,
+.calendar-calendar .day-view .full td.multi-day .inner .dayview .cutoff {
+ height : 22px;
+ padding-top: 0px;
+}
+
+.calendar-calendar .week-view div.single-day .view-item,
+.calendar-calendar .day-view div.single-day .view-item {
+ position : absolute;
+ width : 100%;
+ background : none;
+ text-align : left;
+ z-index : 1;
+}
+
+.calendar-calendar .week-view div.single-day .half-hour,
+.calendar-calendar .day-view div.single-day .half-hour {
+ font-size : 1px;
+ height : 23px;
+ width : 100%;
+ position :relative;
+ z-index : 0;
+ top : 0px;
+ border-bottom : 1px dotted #cccccc;
+}
+
+.calendar-calendar .week-view div.single-day .view-item .calendar,
+.calendar-calendar .day-view div.single-day .view-item .calendar {
+ margin : 0px;
+}
+
+.calendar-calendar .week-view div.single-day .view-item .contents,
+.calendar-calendar .day-view div.single-day .view-item .contents {
+ overflow : hidden;
+}
+
+.calendar-calendar div.single-day .o_0 .view-item {
+ top : 0px;
+}
+
+.calendar-calendar div.single-day .o_1 .view-item {
+ top : 12px;
+}
+
+.calendar-calendar div.single-day .o_2 .view-item {
+ top : 24px;
+}
+
+.calendar-calendar div.single-day .o_3 .view-item {
+ top : 36px;
+}
+
+.calendar-calendar div.single-day .o_4 .view-item {
+ top : 40px;
+}
+
+.calendar-calendar div.single-day .d_1 .view-item .calendar {
+ height : 10px;
+}
+
+
+.calendar-calendar div.single-day .d_2 .view-item .calendar {
+ height : 22px;
+}
+
+
+.calendar-calendar div.single-day .d_3 .view-item .calendar {
+ height : 34px;
+}
+
+
+.calendar-calendar div.single-day .d_4 .view-item .calendar {
+ height : 46px;
+}
+
+
+.calendar-calendar div.single-day .d_5 .view-item .calendar {
+ height : 58px;
+}
+
+
+.calendar-calendar div.single-day .d_6 .view-item .calendar {
+ height : 70px;
+}
+
+
+.calendar-calendar div.single-day .d_7 .view-item .calendar {
+ height : 82px;
+}
+
+
+.calendar-calendar div.single-day .d_8 .view-item .calendar {
+ height : 94px;
+}
+
+
+.calendar-calendar div.single-day .d_9 .view-item .calendar {
+ height : 106px;
+}
+
+
+.calendar-calendar div.single-day .d_10 .view-item .calendar {
+ height : 118px;
+}
+
+
+.calendar-calendar div.single-day .d_11 .view-item .calendar {
+ height : 130px;
+}
+
+
+.calendar-calendar div.single-day .d_12 .view-item .calendar {
+ height : 142px;
+}
+
+
+.calendar-calendar div.single-day .d_13 .view-item .calendar {
+ height : 154px;
+}
+
+
+.calendar-calendar div.single-day .d_14 .view-item .calendar {
+ height : 166px;
+}
+
+
+.calendar-calendar div.single-day .d_15 .view-item .calendar {
+ height : 178px;
+}
+
+
+
+.calendar-calendar div.single-day .d_16 .view-item .calendar {
+ height : 190px;
+}
+
+
+.calendar-calendar div.single-day .d_17 .view-item .calendar {
+ height : 202px;
+}
+
+.calendar-calendar div.single-day .d_18 .view-item .calendar {
+ height : 214px;
+}
+
+.calendar-calendar div.single-day .d_19 .view-item .calendar {
+ height : 226px;
+}
+
+.calendar-calendar div.single-day .d_20 .view-item .calendar {
+ height : 238px;
+}
+
+.calendar-calendar div.single-day .d_21 .view-item .calendar {
+ height : 250px;
+}
+
+.calendar-calendar div.single-day .d_22 .view-item .calendar {
+ height : 262px;
+}
+
+.calendar-calendar div.single-day .d_23 .view-item .calendar {
+ height : 274px;
+}
+
+.calendar-calendar div.single-day .d_24 .view-item .calendar {
+ height : 286px;
+}
+
+.calendar-calendar div.single-day .d_25 .view-item .calendar {
+ height : 298px;
+}
+
+.calendar-calendar div.single-day .d_26 .view-item .calendar {
+ height : 310px;
+}
+
+.calendar-calendar div.single-day .d_27 .view-item .calendar {
+ height : 322px;
+}
+
+.calendar-calendar div.single-day .d_28 .view-item .calendar {
+ height : 334px;
+}
+
+.calendar-calendar div.single-day .d_29 .view-item .calendar {
+ height : 346px;
+}
+
+.calendar-calendar div.single-day .d_30 .view-item .calendar {
+ height : 358px;
+}
+
+.calendar-calendar div.single-day .d_31 .view-item .calendar {
+ height : 370px;
+}
+
+.calendar-calendar div.single-day .d_32 .view-item .calendar {
+ height : 382px;
+}
+
+.calendar-calendar div.single-day .d_33 .view-item .calendar {
+ height : 394px;
+}
+
+.calendar-calendar div.single-day .d_34 .view-item .calendar {
+ height : 406px;
+}
+
+.calendar-calendar div.single-day .d_35 .view-item .calendar {
+ height : 418px;
+}
+
+.calendar-calendar div.single-day .d_36 .view-item .calendar {
+ height : 430px;
+}
+
+.calendar-calendar div.single-day .d_37 .view-item .calendar {
+ height : 442px;
+}
+
+.calendar-calendar div.single-day .d_38 .view-item .calendar {
+ height : 454px;
+}
+
+.calendar-calendar div.single-day .d_39 .view-item .calendar {
+ height : 466px;
+}
+
+.calendar-calendar div.single-day .d_40 .view-item .calendar {
+ height : 478px;
+}
+
+.calendar-calendar div.single-day .d_41 .view-item .calendar {
+ height : 490px;
+}
+
+.calendar-calendar div.single-day .d_42 .view-item .calendar {
+ height : 502px;
+}
+
+.calendar-calendar div.single-day .d_43 .view-item .calendar {
+ height : 514px;
+}
+
+.calendar-calendar div.single-day .d_44 .view-item .calendar {
+ height : 526px;
+}
+
+.calendar-calendar div.single-day .d_45 .view-item .calendar {
+ height : 538px;
+}
+
+.calendar-calendar div.single-day .d_46 .view-item .calendar {
+ height : 550px;
+}
+
+.calendar-calendar div.single-day .d_47 .view-item .calendar {
+ height : 562px;
+}
+
+.calendar-calendar div.single-day .d_48 .view-item .calendar {
+ height : 574px;
+}
+
+.calendar-calendar div.single-day .d_49 .view-item .calendar {
+ height : 586px;
+}
+
+.calendar-calendar div.single-day .d_50 .view-item .calendar {
+ height : 598px;
+}
+
+.calendar-calendar div.single-day .d_51 .view-item .calendar {
+ height : 610px;
+}
+
+.calendar-calendar div.single-day .d_52 .view-item .calendar {
+ height : 622px;
+}
+
+.calendar-calendar div.single-day .d_53 .view-item .calendar {
+ height : 634px;
+}
+
+.calendar-calendar div.single-day .d_54 .view-item .calendar {
+ height : 646px;
+}
+
+.calendar-calendar div.single-day .d_55 .view-item .calendar {
+ height : 658px;
+}
+
+.calendar-calendar div.single-day .d_56 .view-item .calendar {
+ height : 670px;
+}
+
+.calendar-calendar div.single-day .d_57 .view-item .calendar {
+ height : 682px;
+}
+
+.calendar-calendar div.single-day .d_58 .view-item .calendar {
+ height : 694px;
+}
+
+.calendar-calendar div.single-day .d_59 .view-item .calendar {
+ height : 706px;
+}
+
+.calendar-calendar div.single-day .d_60 .view-item .calendar {
+ height : 718px;
+}
+
+.calendar-calendar div.single-day .d_61 .view-item .calendar {
+ height : 730px;
+}
+
+.calendar-calendar div.single-day .d_62 .view-item .calendar {
+ height : 742px;
+}
+
+.calendar-calendar div.single-day .d_63 .view-item .calendar {
+ height : 754px;
+}
+
+.calendar-calendar div.single-day .d_64 .view-item .calendar {
+ height : 766px;
+}
+
+.calendar-calendar div.single-day .d_65 .view-item .calendar {
+ height : 778px;
+}
+
+.calendar-calendar div.single-day .d_66 .view-item .calendar {
+ height : 790px;
+}
+
+.calendar-calendar div.single-day .d_67 .view-item .calendar {
+ height : 802px;
+}
+
+.calendar-calendar div.single-day .d_68 .view-item .calendar {
+ height : 814px;
+}
+
+.calendar-calendar div.single-day .d_69 .view-item .calendar {
+ height : 826px;
+}
+
+.calendar-calendar div.single-day .d_70 .view-item .calendar {
+ height : 838px;
+}
+
+.calendar-calendar div.single-day .d_71 .view-item .calendar {
+ height : 850px;
+}
+
+.calendar-calendar div.single-day .d_72 .view-item .calendar {
+ height : 862px;
+}
+
+.calendar-calendar div.single-day .d_73 .view-item .calendar {
+ height : 874px;
+}
+
+.calendar-calendar div.single-day .d_74 .view-item .calendar {
+ height : 886px;
+}
+
+.calendar-calendar div.single-day .d_75 .view-item .calendar {
+ height : 898px;
+}
+
+.calendar-calendar div.single-day .d_76 .view-item .calendar {
+ height : 910px;
+}
+
+.calendar-calendar div.single-day .d_77 .view-item .calendar {
+ height : 922px;
+}
+
+.calendar-calendar div.single-day .d_78 .view-item .calendar {
+ height : 934px;
+}
+
+.calendar-calendar div.single-day .d_79 .view-item .calendar {
+ height : 946px;
+}
+
+.calendar-calendar div.single-day .d_80 .view-item .calendar {
+ height : 958px;
+}
+
+.calendar-calendar div.single-day .d_81 .view-item .calendar {
+ height : 970px;
+}
+
+.calendar-calendar div.single-day .d_82 .view-item .calendar {
+ height : 982px;
+}
+
+.calendar-calendar div.single-day .d_83 .view-item .calendar {
+ height : 994px;
+}
+
+.calendar-calendar div.single-day .d_84 .view-item .calendar {
+ height : 1006px;
+}
+
+.calendar-calendar div.single-day .d_85 .view-item .calendar {
+ height : 1018px;
+}
+
+.calendar-calendar div.single-day .d_86 .view-item .calendar {
+ height : 1030px;
+}
+
+.calendar-calendar div.single-day .d_87 .view-item .calendar {
+ height : 1042px;
+}
+
+.calendar-calendar div.single-day .d_88 .view-item .calendar {
+ height : 1054px;
+}
+
+.calendar-calendar div.single-day .d_89 .view-item .calendar {
+ height : 1066px;
+}
+
+.calendar-calendar div.single-day .d_90 .view-item .calendar {
+ height : 1078px;
+}
+
+.calendar-calendar div.single-day .d_91 .view-item .calendar {
+ height : 1090px;
+}
+
+.calendar-calendar div.single-day .d_92 .view-item .calendar {
+ height : 1102px;
+}
+
+.calendar-calendar div.single-day .d_93 .view-item .calendar {
+ height : 1114px;
+}
+
+.calendar-calendar div.single-day .d_94 .view-item .calendar {
+ height : 1128px;
+}
+
+.calendar-calendar div.single-day .d_95 .view-item .calendar {
+ height : 1140px;
+}
+
+.calendar-calendar div.single-day .d_96 .view-item .calendar {
+ height : 1152px;
+}
+
+.calendar-calendar .week-view div.single-day .i_0 .view-item .calendar {
+ margin-left : 0px;
+ width : 55px;
+}
+
+.calendar-calendar .week-view div.single-day .i_1 .view-item .calendar {
+ margin-left : 15px;
+ width : 102px;
+}
+
+.calendar-calendar .week-view div.single-day .i_2 .view-item .calendar {
+ margin-left : 23px;
+ width : 94px;
+}
+
+.calendar-calendar .week-view div.single-day .i_3 .view-item .calendar {
+ margin-left : 29px;
+ width : 88px;
+}
+
+.calendar-calendar .week-view div.single-day .i_4 .view-item .calendar {
+ margin-left : 40px;
+ width : 77px;
+}
+
+.calendar-calendar .week-view div.single-day .i_5 .view-item .calendar {
+ margin-left : 50px;
+ width : 67px;
+}
+
+.calendar-calendar .week-view div.single-day .i_6 .view-item .calendar {
+ margin-left : 60px;
+ width : 57px;
+}
+
+.calendar-calendar .week-view div.single-day .i_7 .view-item .calendar {
+ margin-left : 67px;
+ width : 50px;
+}
+
+.calendar-calendar .week-view div.single-day .i_8 .view-item .calendar {
+ margin-left : 75px;
+ width : 42px;
+}
+
+.calendar-calendar .week-view div.single-day .i_9 .view-item .calendar {
+ margin-left : 90px;
+ width : 27px;
+}
+
+.calendar-calendar .week-view div.single-day .i_0.md_0 .view-item .calendar {
+ width : 115px !important;
+ width : auto;
+}
+
+.calendar-calendar .week-view div.single-day .i_0.md_1 .view-item .calendar {
+ width : 75px !important;
+ width : auto;
+}
+
+.calendar-calendar .day-view div.single-day .i_0 .view-item .calendar {
+ margin-left : 2px;
+ width : 210px !important;
+ width : 838px;
+}
+
+.calendar-calendar .day-view div.single-day .i_1 .view-item .calendar {
+ margin-left : 90px;
+ width : 750px;
+}
+
+.calendar-calendar .day-view div.single-day .i_2 .view-item .calendar {
+ margin-left : 180px;
+ width : 660px;
+}
+
+.calendar-calendar .day-view div.single-day .i_3 .view-item .calendar {
+ margin-left : 270px;
+ width : 570px;
+}
+
+.calendar-calendar .day-view div.single-day .i_4 .view-item .calendar {
+ margin-left : 360px;
+ width : 480px;
+}
+
+.calendar-calendar .day-view div.single-day .i_5 .view-item .calendar {
+ margin-left : 450px;
+ width : 390px;
+}
+
+.calendar-calendar .day-view div.single-day .i_6 .view-item .calendar {
+ margin-left : 540px;
+ width : 300px;
+}
+
+.calendar-calendar .day-view div.single-day .i_7 .view-item .calendar {
+ margin-left : 630px;
+ width : 210px;
+}
+
+.calendar-calendar .day-view div.single-day .i_8 .view-item .calendar {
+ margin-left : 720px;
+ width : 120px;
+}
+
+.calendar-calendar .day-view div.single-day .i_9 .view-item .calendar {
+ margin-left : 810px;
+ width : 30px;
+}
+
+.calendar-calendar .day-view div.single-day .i_0.md_0 .view-item .calendar {
+ width : 838px !important;
+ width : auto;
+}
+
+.calendar-calendar .day-view div.single-day .i_0.md_1 .view-item .calendar {
+ width : 419px !important;
+ width : auto;
+}
+
+.calendar-calendar .day-view div.single-day .i_0.md_2 .view-item .calendar {
+ width : 350px !important;
+ width : auto;
+}
+
+.single-day-footer .grippie,
+.header-body-divider .grippie {
+ overflow: hidden;
+ background: #eee url(/misc/grippie.png) no-repeat center 2px;
+ cursor: s-resize;
+ height : 3px;
+}
diff --git a/sites/all/modules/calendar/calendar_multiday/calendar_multiday.css b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.css
new file mode 100644
index 0000000..44f0edc
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.css
@@ -0,0 +1,852 @@
+/* calendar calendar table styles */
+.calendar-calendar tr.odd, .calendar-calendar tr.even {
+ background-color:#fff;
+}
+.calendar-calendar table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin:0 auto;
+ padding:0;
+ width: 100%; /* Setting at 100% causes problem in Internet Explorer. */
+}
+.calendar-calendar .month-view table {
+ border:none;
+ padding:0;
+ margin:0;
+ width:100%;
+}
+
+ /* IE needs a little help to get the side by side tables to the right size */
+.calendar-calendar .year-view td {
+ width:32%;
+ padding:1px;
+ border:none;
+}
+
+.calendar-calendar .year-view td table td {
+ width:13%;
+ padding:0;
+}
+
+.calendar-calendar tr {
+ padding: 0;
+ margin: 0;
+ background-color: white;
+}
+.calendar-calendar th {
+ text-align: center;
+ margin:0;
+}
+.calendar-calendar th a {
+ font-weight: bold;
+}
+.calendar-calendar td {
+ width: 12%; /* 14% is about 1/7 of total table width */
+ min-width: 12%;
+ border: 1px solid #ccc;
+ color: #777;
+ text-align: right;
+ vertical-align: top;
+ margin: 0;
+ padding:0;
+}
+
+/* simplify the mini calendar by removing borders */
+.calendar-calendar .mini {
+ border:none;
+ }
+
+/* format for the week number in the first cell */
+.calendar-calendar td.week {
+ width:1%;
+ min-width:1%;
+ }
+.calendar-calendar .week {
+ clear:both;
+ font-style: normal;
+ color: #555;
+ font-size: 0.8em;
+}
+.calendar-calendar .week a {
+ font-weight:normal;
+}
+
+/* IE6 does not support min-height, using Min-Height fast hack from http://www.dustindiaz.com/min-height-fast-hack */
+.calendar-calendar .inner {
+ height:auto !important;
+ height:5em;
+ padding:0;
+ margin:0;
+}
+.calendar-calendar .inner div {
+ padding:0;
+ margin:0;
+}
+/* Make sure paragraphs buried in calendar cells use padding, not margins, for separation so the background color doesn't come through. */
+.calendar-calendar .inner p {
+ padding:0 0 .8em 0;
+ margin:0;
+}
+.calendar-calendar td a {
+ font-weight: bold;
+ text-decoration: none;
+}
+.calendar-calendar td a:hover {
+ text-decoration: underline;
+}
+.calendar-calendar td.year,
+.calendar-calendar td.month {
+ text-align: center;
+}
+
+/* format days of the week header cells */
+.calendar-calendar th.days {
+ color: #ccc;
+ background-color: #224;
+ text-align: center;
+ padding:1px;
+ margin:0;
+ }
+
+/* floating day number div */
+.calendar-calendar div.day {
+ float: right;
+ text-align: center;
+ padding: 0.125em 0.25em 0 0.25em;
+ margin: 0;
+ background-color: #f3f3f3;
+ border: 1px solid gray;
+ border-width: 0 0 1px 1px;
+ clear:both;
+ width:1.5em;
+}
+
+/* individual node container */
+.calendar-calendar div.calendar {
+ background-color: #fff;
+ border: solid 1px #ddd;
+ text-align: left;
+ margin:0 .25em .25em 0;
+ width: 96%;
+ float:right; /* needed to keep IE from hiding the floating day number */
+ clear:both;
+}
+/* No floating of day view content because there is no floating day number */
+.calendar-calendar .day-view div.calendar {
+ float:none;
+ width:98%;
+ margin:1% 1% 0 1%;
+}
+
+.calendar-calendar div.title {
+ font-size:.8em;
+ text-align:center;
+}
+
+.calendar-calendar div.title a {
+ color: #000;
+}
+.calendar-calendar div.title a:hover {
+ color: #c00;
+}
+.calendar-calendar .content {
+ clear:both;
+ padding: 3px;
+ padding-left: 5px;
+}
+.calendar div.form-item {
+ white-space: normal;
+}
+
+table td.mini,
+table th.mini,
+table.mini td.week {
+ padding:0 1px 0 0;
+ margin:0;
+ }
+table td.mini a {
+ font-weight:normal;
+ }
+.calendar-calendar .mini-day-off {
+ padding:0px;
+}
+.calendar-calendar .mini-day-on {
+ padding:0px;
+}
+table .mini-day-on a {
+ text-decoration:underline;
+ }
+.calendar-calendar .mini .title {
+ font-size:.8em;
+ }
+.mini .calendar-calendar .week {
+ font-size:.7em;
+ }
+.mini-row {
+ width:100%;
+ border:none;
+}
+.mini{
+ width:32%;
+ vertical-align:top;
+ }
+
+
+/* formatting for the legend stripe and block */
+.calendar-calendar .stripe {
+ height: 5px;
+ width: auto;
+ font-size:1px !important;
+ line-height:1px !important;
+}
+.calendar-calendar .day-view .stripe {
+ width:100%;
+}
+table.calendar-legend {
+ background-color:#ccc;
+ width:100%;
+ margin:0;
+ padding:0;
+}
+table.calendar-legend tr.odd .stripe,
+table.calendar-legend tr.even .stripe {
+ height:12px !important;
+ font-size:9px !important;
+ line-height:10px !important;
+}
+.calendar-legend td {
+ text-align:left;
+}
+
+.calendar-empty {
+ font-size:1px;
+ line-height:1px;
+}
+
+/* formatting for the full day view */
+.calendar-calendar td.calendar-agenda-hour {
+ text-align:right;
+ border:none;
+ border-top:1px solid #CCCCCC;
+ padding-top:.25em;
+ width:1%;
+}
+.calendar-calendar td.calendar-agenda-no-hours {
+ min-width:1%;
+}
+.calendar-calendar td.calendar-agenda-hour .calendar-hour {
+ font-size:1.2em;
+ font-weight:bold;
+}
+.calendar-calendar td.calendar-agenda-hour .calendar-ampm {
+ font-size:1em;
+}
+.calendar-calendar td.calendar-agenda-items {
+ border:1px solid #CCCCCC;
+ text-align:left;
+}
+.calendar-calendar td.calendar-agenda-items div.calendar {
+ width:auto;
+ padding:.25em;
+ margin:0;
+}
+.calendar-calendar div.calendar div.inner .calendar-agenda-empty {
+ width:100%;
+ text-align:center;
+ vertical-align:middle;
+ padding:1em 0;
+ background-color:#fff;
+}
+
+/* the popup date selector for jumping to a new date */
+.calendar-date-select form {
+ text-align:right;
+ float:right;
+ width:25%;
+}
+.calendar-date-select div,
+.calendar-date-select input,
+.calendar-date-select label {
+ text-align:right;
+ padding:0;
+ margin:0;
+ float:right;
+ clear:both;
+}
+.calendar-date-select .description {
+ float:right;
+}
+.calendar-label {
+ font-weight:bold;
+ display:block;
+ clear:both;
+}
+
+.calendar-calendar div.date-nav {
+ background-color:#ccc;
+ color:#777;
+ padding:0.2em;
+ width:auto;
+ border:1px solid #ccc;
+}
+.calendar-calendar div.date-nav a,
+.calendar-calendar div.date-nav h3 {
+ color:#777;
+ text-decoration:none;
+}
+.calendar-calendar th.days {
+ background-color:#eee;
+ color:#777;
+ font-weight:bold;
+ border:1px solid #ccc;
+}
+.calendar-calendar td.empty {
+ background:#ccc;
+ border-color:#ccc;
+}
+.calendar-calendar table.mini td.empty {
+ background:#fff;
+ border-color:#fff;
+}
+.calendar-calendar td div.day {
+ border:1px solid #ccc;
+ border-top:none;
+ border-right:none;
+ margin-bottom:2px;
+}
+.calendar-calendar td .inner div,
+.calendar-calendar td .inner div a {
+ background:#eee;
+}
+/* Set small font size for all items in calendar div, themes can override this. */
+/* Use x-small instead of em to avoid multiplying effect in nested items. */
+.calendar-calendar div.calendar {
+ border:none;
+ font-size:x-small;
+}
+.calendar-calendar td .inner div.calendar div,
+.calendar-calendar td .inner div.calendar div a {
+ border:none;
+ background:#ffc;
+ padding:0;
+}
+.calendar-calendar td .inner div.calendar div.calendar-more,
+.calendar-calendar td .inner div.calendar div.calendar-more a {
+ color:#444;
+ background:#fff;
+ text-align:right;
+}
+.calendar-calendar td .inner .view-field,
+.calendar-calendar td .inner .view-field a {
+ color:#444;
+ font-weight:normal;
+}
+
+.calendar-calendar td span.date-display-single,
+.calendar-calendar td span.date-display-start,
+.calendar-calendar td span.date-display-end,
+.calendar-calendar td span.date-display-separator {
+ font-weight:bold;
+}
+.calendar-calendar td .inner div.day a {
+ color:#4b85ac;
+}
+.calendar-calendar tr td.today,
+.calendar-calendar tr.odd td.today,
+.calendar-calendar tr.even td.today {
+ background-color:#C3D6E4;
+}
+.calendar-calendar td .inner div.calendar div div.view-data-node-data-field-date-field-date-value {
+}
+
+/* The following are not used by default but are available for themes */
+.calendar-calendar td.past {}
+.calendar-calendar td.future {}
+.calendar-calendar td.has-events {}
+.calendar-calendar td.has-no-events {}
+
+/* Multi day styles */
+.calendar-calendar tbody {
+ border-top : none;
+}
+
+.calendar-calendar .month-view .full .inner,
+.calendar-calendar .week-view .full .multi-day .inner {
+ height : auto;
+ min-height : auto;
+}
+.calendar-calendar .week-view .full .calendar-agenda-hour
+.calendar-calendar .month-view .full .single-day .inner .view-item {
+ float : left;
+ width : 100%;
+}
+
+.calendar-calendar .week-view .full .calendar-agenda-hour {
+ width : 6%;
+ min-width : 0px;
+ padding-right : 2px;
+}
+
+.calendar-calendar .week-view .full .days {
+ width : 13%;
+}
+
+.calendar-calendar .month-view .full div.calendar,
+.calendar-calendar .week-view .full div.calendar,
+.calendar-calendar .day-view div.calendar {
+ width : auto;
+}
+
+.calendar-calendar .month-view .full tr.date-box,
+.calendar-calendar .month-view .full tr.date-box td,
+.calendar-calendar .month-view .full tr.multi-day,
+.calendar-calendar .month-view .full tr.multi-day td {
+ height : 19px;
+ max-height : 19px;
+}
+
+.calendar-calendar .month-view .full tr.single-day .no-entry,
+.calendar-calendar .month-view .full tr.single-day .no-entry .inner {
+ height : 44px !important;
+ line-height : 44px;
+ font-size : 1px;
+}
+
+.calendar-calendar .month-view .full tr.single-day .noentry-multi-day,
+.calendar-calendar .month-view .full tr.single-day .noentry-multi-day .inner {
+ height : 22px !important;
+ line-height : 22px;
+ font-size : 1px;
+}
+
+.calendar-calendar .month-view .full td,
+.calendar-calendar .week-view .full td,
+.calendar-calendar .day-view td {
+ vertical-align: top;
+ padding :1px 2px 0 2px
+}
+
+.calendar-calendar .month-view .full td.date-box {
+ height : 1%;
+ border-bottom: 0px;
+ padding-bottom : 2px;
+}
+
+
+.calendar-calendar .month-view .full .week {
+ font-size : inherit;
+}
+
+.calendar-calendar .month-view .full .week a,
+.calendar-calendar .week-view .full .week a {
+ color:#4b85ac;
+}
+
+.calendar-calendar .month-view .full td .inner div.day,
+.calendar-calendar .month-view .full td .inner div.day a {
+ border :none;
+ background : none;
+ margin-bottom: 0px;
+}
+
+.calendar-calendar .month-view .full td.date-box .inner,
+.calendar-calendar .week-view .full td.date-box .inner {
+ min-height : inherit;
+}
+
+.calendar-calendar .month-view .full td.multi-day,
+.calendar-calendar .week-view .full td.multi-day {
+ border-top: 0px;
+ border-bottom: 0px;
+}
+
+.calendar-calendar .week-view .full .first td.multi-day {
+ border-top : 1px solid #CCCCCC;
+}
+
+.calendar-calendar .month-view .full td.single-day {
+ border-top: 0px;
+}
+
+.calendar-calendar .month-view .full td.multi-day .inner,
+.calendar-calendar .week-view .full td.multi-day .inner,
+.calendar-calendar .day-view .full td.multi-day .inner {
+ min-height : inherit;
+ width : auto;
+ position : relative;
+}
+
+.calendar-calendar .month-view .full td.multi-day.no-entry {
+ min-height : 0px;
+}
+
+.calendar-calendar .month-view .full td.single-day .calendar-empty,
+.calendar-calendar .month-view .full td.single-day.empty,
+.calendar-calendar .month-view .full td.date-box.empty {
+ background : #F4F4F4;
+}
+
+.calendar-calendar .month-view .full td.single-day .inner div,
+.calendar-calendar .month-view .full td.single-day .inner div a ,
+.calendar-calendar .month-view .full td.multi-day .inner div,
+.calendar-calendar .month-view .full td.multi-day .inner div a ,
+.calendar-calendar .month-view .full td .inner div.calendar.monthview div,
+.calendar-calendar .month-view .full td .inner div.calendar.monthview div a,
+.calendar-calendar .week-view .full td.single-day .inner div,
+.calendar-calendar .week-view .full td.single-day .inner div a ,
+.calendar-calendar .week-view .full td.multi-day .inner div,
+.calendar-calendar .week-view .full td.multi-day .inner div a ,
+.calendar-calendar .week-view .full td .inner div.calendar.weekview div,
+.calendar-calendar .week-view .full td .inner div.calendar.weekview div a,
+.calendar-calendar .day-view .full td .inner div.view-item,
+.calendar-calendar .day-view .full td .inner div.calendar div,
+.calendar-calendar .day-view .full td .inner div.calendar div a {
+ background : none;
+}
+
+.calendar-calendar .day-view .full td .inner div.calendar div,
+.calendar-calendar .day-view .full td .inner div.calendar div a {
+ margin : 0px 3px;
+}
+
+.calendar-calendar .day-view .full td .inner div.calendar div.stripe {
+ margin : 0px;
+}
+
+.calendar-calendar .month-view .full tr td.today,
+.calendar-calendar .month-view .full tr.odd td.today,
+.calendar-calendar .month-view .full tr.even td.today {
+ background: none;
+ border-left :2px solid #7C7F12;
+ border-right :2px solid #7C7F12;
+}
+
+.calendar-calendar .month-view .full td.date-box.today {
+ border-width : 2px 2px 0px 2px;
+ border-style: solid;
+ border-color : #7C7F12;
+}
+
+.calendar-calendar .month-view .full tr td.single-day.today {
+ border-bottom :2px solid #7C7F12;
+}
+
+.calendar-calendar .month-view .full tr td.multi-day.starts-today {
+ border-left :2px solid #7C7F12;
+}
+
+.calendar-calendar .month-view .full tr td.multi-day.ends-today {
+ border-right :2px solid #7C7F12;
+}
+
+.calendar-calendar .month-view .full tr td.multi-day,
+.calendar-calendar .month-view .full tr td.single-day {
+ border-top : 0px;
+}
+
+.calendar-calendar .month-view .full tr td.multi-day,
+.calendar-calendar .month-view .full tr td.date-box {
+ border-bottom : 0px;
+}
+
+.calendar-calendar .month-view .full .inner .monthview,
+.calendar-calendar .week-view .full .inner .weekview,
+.calendar-calendar .day-view .full .inner .dayview {
+ -moz-border-radius : 5px;
+ border-radius : 5px;
+ width : auto;
+ float : none;
+ display : block;
+ margin : .25em auto;
+ position : relative;
+}
+
+
+.calendar-calendar .month-view .full td.single-day div.monthview,
+.calendar-calendar .week-view .full td.single-day div.weekview,
+.calendar-calendar .day-view .full td.single-day div.dayview {
+ background : #FFD8C0;
+ width : auto;
+ padding : 0px 3px;
+ overflow : hidden;
+}
+
+.calendar-calendar .month-view .full td.single-day .calendar-more div.monthview {
+ background : none;
+}
+
+.calendar-calendar .day-view td div.dayview {
+ padding : 0px;
+}
+
+.calendar-calendar .month-view .full td.multi-day div.monthview,
+.calendar-calendar .week-view .full td.multi-day div.weekview,
+.calendar-calendar .day-view .full td.multi-day div.dayview {
+ background : #74a5d7;
+ height : 1.9em;
+ overflow : hidden;
+ margin : 0px auto;
+ color : #ffffff;
+ position : relative;
+}
+
+.calendar-calendar .week-view .full td.multi-day div.weekview {
+ height : 3.5em;
+}
+
+.calendar-calendar .month-view .full td.multi-day .inner .view-field,
+.calendar-calendar .month-view .full td.multi-day .inner .view-field a,
+.calendar-calendar .week-view .full td.multi-day .inner .view-field,
+.calendar-calendar .week-view .full td.multi-day .inner .view-field a,
+.calendar-calendar .day-view .full td.multi-day .inner .view-field,
+.calendar-calendar .day-view .full td.multi-day .inner .view-field a {
+ color : #ffffff;
+}
+
+.calendar-calendar .full td.multi-day .calendar .view-field,
+.calendar-calendar .full td.single-day .calendar .view-field {
+}
+
+.calendar-calendar .day-view .full td.multi-day div.dayview,
+.calendar-calendar .week-view .full td.multi-day div.weekview {
+ margin-bottom: 2px;
+}
+
+.calendar-calendar .month-view .full td.multi-day .calendar.monthview .view-field {
+ white-space: nowrap;
+ float : left;
+ margin-right : 3px;
+}
+
+.calendar-calendar .week-view .full td.multi-day .calendar.weekview .view-field {
+ white-space: nowrap;
+ display : inline;
+ margin-right : 3px;
+}
+
+.calendar-calendar .day-view .full td.multi-day .calendar.weekview .view-field {
+ display : block;
+}
+
+.calendar-calendar .month-view .full td.multi-day .calendar.monthview .contents,
+.calendar-calendar .week-view .full td.multi-day .calendar.weekview .contents {
+ position : absolute;
+ width : 3000px;
+ left: 5px;
+}
+
+.calendar-calendar .day-view td .stripe,
+.calendar-calendar .month-view .full td .stripe,
+.calendar-calendar .week-view .full td .stripe {
+ -moz-border-radius : 5px 5px 0px 0px;
+ border-radius : 5px 5px 0px 0px;
+ left: 0px;
+ top : 0px;
+ position:absolute;
+ width : 100%;
+ height :3px;
+ z-index : 2;
+}
+
+.calendar-calendar .full td.single-day .continuation,
+.calendar-calendar .full td.single-day .continues,
+.calendar-calendar .full td.single-day .cutoff {
+ display : none;
+}
+
+.calendar-calendar .month-view .full td.multi-day .inner .monthview .continuation,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continuation {
+ float :left;
+ margin-right : 3px;
+ height : 1.9em;
+}
+
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continuation {
+ height : 2.75em;
+ padding-top: 0.75em;
+ margin-right : 8px;
+}
+
+.calendar-calendar .month-view .full td.multi-day .inner .monthview .continues,
+.calendar-calendar .month-view .full td.multi-day .inner .monthview .cutoff,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continues,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .cutoff {
+ position:absolute;
+ right : 0px !important;
+ right : -1px;
+ width : 10px;
+ text-align: left;
+ background : #74a5d7;
+ -moz-border-radius : 0px 5px 5px 0px;
+ border-radius : 0px 5px 5px 0px;
+ height : 1.9em;
+ padding-left: 6px;
+ z-index : 1;
+}
+
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .continues,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .cutoff {
+ height : 2.75em;
+ padding-top: 0.75em;
+}
+
+.calendar-calendar .month-view .full td.multi-day .inner .monthview .cutoff,
+.calendar-calendar .week-view .full td.multi-day .inner .weekview .cutoff {
+ width : 8px;
+ padding-left: 0px;
+}
+
+.calendar-calendar .week-view .full td.multi-day {
+ padding : 2px;
+}
+
+.calendar-calendar .week-view td.single-day div.calendar {
+ width : 100%;
+ padding-left:0px;
+ padding-right : 0px;
+}
+
+.calendar-calendar .week-view .full tr.last td.multi-day {
+ border-bottom:1px solid #CCCCCC;
+}
+
+/* Restyle Header */
+.view-content .calendar-calendar {
+ position : relative;
+ margin-top : 5px;
+ float:left;
+ width: 100%;
+}
+
+.view-content .calendar-calendar .links {
+ display : block;
+}
+
+.view-content .calendar-calendar ul.links {
+ margin-bottom: 3px;
+}
+
+.view-content .calendar-calendar ul {
+ position : absolute;
+ top : 8px ;
+ line-height : inherit;
+ z-index : 1;
+}
+
+.view-content .calendar-calendar li {
+ float : left;
+ line-height : inherit ;
+ margin-left : 10px ;
+}
+
+.view-content .calendar-calendar li a {
+ text-decoration : underline ;
+ line-height : inherit ;
+}
+
+.view-content .calendar-calendar .date-nav {
+ background-color : transparent ;
+ border : 0px ;
+ height : 30px;
+ height : auto ;
+ min-height : 30px;
+}
+
+.view-content .calendar-calendar .date-prev a,
+.view-content .calendar-calendar .date-next a {
+ text-decoration : none ;
+ color : inherit ;
+ font-size : 12px;
+}
+
+.view-content .calendar-calendar .date-nav a:hover {
+ text-decoration : underline ;
+}
+
+.view-content .calendar-calendar .date-prev {
+ -moz-border-radius:5px 0 0 5px;
+ border-radius:5px 0 0 5px;
+ background:none repeat scroll 0 0 #dfdfdf;
+ float:none;
+ padding:5px 0;
+ position:absolute;
+ right:60px;
+ text-align:right;
+ top:0px;
+ width:auto;
+ z-index : 1;
+ font-size : 12px;
+}
+
+div.block .view-content .calendar-calendar .date-prev {
+ left:0;
+ right:auto;
+}
+
+.view-content .calendar-calendar .date-prev span {
+ margin-left : 10px;
+ font-style : bold;
+}
+
+.view-content .calendar-calendar .date-heading {
+ position : relative;
+ width : 100%;
+ top : 0px;
+ text-align : center;
+ z-index : 0;
+ float : none;
+}
+
+.view-content .calendar-calendar .date-heading h3 {
+ line-height : 30px ;
+ font-size : 1.7em ;
+}
+
+.view-content .calendar-calendar .date-next {
+ -moz-border-radius:0px 5px 5px 0px;
+ border-radius:0px 5px 5px 0px;
+ background:none repeat scroll 0 0 #dfdfdf;
+ float:none;
+ padding:5px 0;
+ position:absolute;
+ right:0px;
+ text-align:right;
+ top:0px;
+ width:auto;
+ z-index : 1;
+ font-size : 12px;
+}
+
+.view-content .calendar-calendar .date-next span {
+ margin-right : 10px;
+ font-style : bold;
+}
+
+.view-content:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.attachment .calendar-calendar {
+ margin-top : 20px ;
+ clear : both;
+}
+
+.calendar-calendar th a,
+.attachment .calendar-calendar th {
+ background-color : transparent ;
+ border : 0px ;
+}
+
+.attachment .calendar-calendar th.calendar-agenda-hour {
+ color : #777777;
+ font-weight : bold;
+ text-align : right;
+}
+
+.view-calendar .feed-icon {
+ margin-top : 5px;
+}
diff --git a/sites/all/modules/calendar/calendar_multiday/calendar_multiday.info b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.info
new file mode 100644
index 0000000..5c313f5
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.info
@@ -0,0 +1,15 @@
+; $Id: calendar_multiday.info,v 1.1.2.2 2011/01/03 12:28:47 karens Exp $
+name = Calendar Multiday
+description = "Use the calendar multiday display as an alternative to the standard display. (BETA version)"
+dependencies[] = calendar
+dependencies[] = views
+core = 6.x
+php = 5.2
+package = Date/Time
+
+; Information added by drupal.org packaging script on 2011-01-03
+version = "6.x-2.4"
+core = "6.x"
+project = "calendar"
+datestamp = "1294072550"
+
diff --git a/sites/all/modules/calendar/calendar_multiday/calendar_multiday.install b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.install
new file mode 100644
index 0000000..66598cd
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/calendar_multiday.install
@@ -0,0 +1,12 @@
+ 2,
+ 'path' => drupal_get_path('module', 'calendar_multiday'),
+ );
+}
+
+/**
+ * @file
+ * Adds calendar filtering and displays to Views.
+ */
+function calendar_multiday_init() {
+ if (substr($_GET['q'], 0, 24) == 'admin/build/modules/list') {
+ return;
+ }
+ drupal_add_css(drupal_get_path('module', 'calendar_multiday') .'/calendar_multiday.css');
+ require_once('./'. drupal_get_path('module', 'calendar_multiday') .'/theme/theme.inc');
+}
+
+function calendar_multiday_theme() {
+ $path = drupal_get_path('module', 'calendar_multiday');
+ $base = array(
+ 'file' => 'theme.inc',
+ 'path' => "$path/theme",
+ );
+ return array(
+ 'calendar_day_node' => $base + array(
+ 'template' => 'calendar-day-node',
+ 'arguments' => array('node' => NULL, 'view' => NULL),
+ ),
+ 'calendar_month_node' => $base + array(
+ 'template' => 'calendar-month-node',
+ 'arguments' => array('node' => NULL, 'view' => NULL),
+ ),
+ 'calendar_week_node' => $base + array(
+ 'template' => 'calendar-week-node',
+ 'arguments' => array('node' => NULL, 'view' => NULL),
+ ),
+ 'calendar_month_multiple_node' => $base + array(
+ 'template' => 'calendar-month-multiple-node',
+ 'arguments' => array('curday' => NULL, 'count' => NULL, 'view' => NULL, 'types' => NULL),
+ ),
+ 'calendar_week_multiple_node' => $base + array(
+ 'template' => 'calendar-week-multiple-node',
+ 'arguments' => array('curday' => NULL, 'count' => NULL, 'view' => NULL, 'types' => NULL),
+ ),
+ 'calendar_datebox' => $base + array(
+ 'template' => 'calendar-datebox',
+ 'arguments' => array(
+ 'date' => NULL, 'view' => NULL, 'items' => NULL, 'selected' => NULL),
+ ),
+ 'calendar_date_combo' => $base + array(
+ 'arguments' => array('node', 'lable', 'view'),
+ ),
+ 'calendar_empty_day' => $base + array(
+ 'arguments' => array('curday', 'view'),
+ ),
+ 'calendar_stripe_legend' => $base + array(
+ 'arguments' => array('stripe_labels'),
+ ),
+ 'calendar_stripe_stripe' => $base + array(
+ 'arguments' => array('node'),
+ ),
+ 'calendar_colorpicker' => $base + array(
+ 'arguments' => array('element'),
+ ),
+ 'calendar_colorfield' => $base + array(
+ 'arguments' => array('element'),
+ ),
+ 'calendar_time_row_heading' => $base + array(
+ 'arguments' => array('start_time', 'next_start_time', 'curday_date'),
+ ),
+ 'calendar_month_col' => $base + array(
+ 'template' => 'calendar-month-col',
+ 'arguments' => array('item' => NULL),
+ ),
+ 'calendar_month_row' => $base + array(
+ 'template' => 'calendar-month-row',
+ 'arguments' => array('inner' => NULL, 'class' => NULL, 'iehint' => NULL),
+ ),
+ );
+}
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/calendar_overlap.js b/sites/all/modules/calendar/calendar_multiday/calendar_overlap.js
new file mode 100644
index 0000000..2f8c4c7
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/calendar_overlap.js
@@ -0,0 +1,87 @@
+// $Id: calendar_overlap.js,v 1.1.2.1 2010/11/28 23:31:28 karens Exp $
+/*
+ * Create the splitter, set the viewport size, and set the position of the scrollbar to the first item.
+ */
+Drupal.behaviors.calendarSetScroll = function (context) {
+
+ // Make multi-day resizable - stolen/borrowed from textarea.js
+ $('.header-body-divider:not(.header-body-divider-processed)').each(function() {
+ var divider = $(this).addClass('header-body-divider-processed');
+ var start_y = divider.offset().top;
+
+ // Add the grippie icon
+ $(this).prepend('').mousedown(startDrag);
+
+ function startDrag(e) {
+ start_y = divider.offset().top;
+ $(document).mousemove(performDrag).mouseup(endDrag);
+ return false;
+ }
+
+ function performDrag(e) {
+ var offset = e.pageY - start_y;
+ var mwc = $('#multi-day-container');
+ var sdc = $('#single-day-container');
+ var mwc_height = mwc.height();
+ var sdc_height = sdc.height();
+ var max_height = mwc_height + sdc_height;
+ mwc.height(Math.min(max_height,Math.max(0,mwc_height + offset)));
+ sdc.height(Math.min(max_height,Math.max(0,sdc_height - offset)));
+ start_y = divider.offset().top;
+ return false;
+ }
+
+ function endDrag(e) {
+ $(document).unbind("mousemove", performDrag).unbind("mouseup", endDrag);
+ }
+ });
+
+ $('.single-day-footer:not(.single-day-footer-processed)').each(function() {
+ var divider = $(this).addClass('single-day-footer-processed');
+ var start_y = divider.offset().top;
+
+ // Add the grippie icon
+ $(this).prepend('').mousedown(startDrag);
+
+ function startDrag(e) {
+ start_y = divider.offset().top;
+ $(document).mousemove(performDrag).mouseup(endDrag);
+ return false;
+ }
+
+ function performDrag(e) {
+ var offset = e.pageY - start_y;
+ var sdc = $('#single-day-container');
+ sdc.height(Math.max(0,sdc.height() + offset));
+ start_y = divider.offset().top;
+ return false;
+ }
+
+ function endDrag(e) {
+ $(document).unbind("mousemove", performDrag).unbind("mouseup", endDrag);
+ }
+ });
+
+ // Size the window
+ calendar_resizeViewport();
+}
+
+// Scroll the viewport to the first item
+function calendar_scrollToFirst() {
+ if ($('div.first_item').size() > 0 ) {
+ var y = $('div.first_item').offset().top - $('#single-day-container').offset().top ;
+ $('#single-day-container').scrollTop(y);
+ }
+}
+
+// Size the single day view
+function calendar_resizeViewport() {
+
+ // Size of the browser window
+ var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height();
+ var top = $('#single-day-container').offset().top;
+
+ // Give it a 20 pixel margin at the bottom
+ $('#single-day-container').height(viewportHeight - top - 20);
+}
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/includes/calendar.inc b/sites/all/modules/calendar/calendar_multiday/includes/calendar.inc
new file mode 100644
index 0000000..85c5eb7
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/includes/calendar.inc
@@ -0,0 +1,619 @@
+ $item) {
+ if (empty($item->calendar_start_date) || empty($item->calendar_end_date)) {
+ continue;
+ }
+ $item_start = date_format($item->calendar_start_date, DATE_FORMAT_DATE);
+ $item_end = date_format($item->calendar_end_date, DATE_FORMAT_DATE);
+ if (($item_start >= $view->date_info->min_date_date && $item_start <= $view->date_info->max_date_date)
+ || ($item_end >= $view->date_info->min_date_date && $item_end <= $view->date_info->max_date_date)) {
+ $values[$item_start][date_format($item->date_start, 'H:i:s')][] = $item;
+ }
+ }
+ $items = $values;
+ ksort($items);
+
+ $rows = array();
+ $curday = drupal_clone($view->date_info->min_date);
+
+ switch ($view->date_info->granularity) {
+ case 'year':
+ $rows = array();
+ $view->date_info->mini = TRUE;
+ for ($i = 1; $i <= 12; $i++) {
+ $rows[$i] = calendar_build_mini_month($curday, $view, $items);
+ }
+ $view->date_info->mini = FALSE;
+ break;
+ case 'month':
+ $rows = ($view->date_info->mini) ? calendar_build_mini_month($curday, $view, $items) : calendar_build_month($curday, $view, $items);
+ break;
+ case 'day':
+ $rows = calendar_build_day($curday, $view, $items);
+ break;
+ case 'week':
+ $rows = calendar_build_week($curday, $view, $items);
+ // Merge the day names in as the first row.
+ $rows = array_merge(array(calendar_week_header($view)), $rows);
+ break;
+ }
+ return $rows;
+
+}
+/**
+ * Build one month.
+ */
+function calendar_build_mini_month(&$curday, $view, $items) {
+ $month = date_format($curday, 'n');
+ date_modify($curday, '-' . strval(date_format($curday, 'j')-1) . ' days');
+ $rows = array();
+ do {
+ $rows = array_merge($rows, calendar_build_mini_week($curday, $view, $items, TRUE));
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $curday_month = date_format($curday, 'n');
+ } while ($curday_month == $month && $curday_date <= $view->date_info->max_date_date);
+ // Merge the day names in as the first row.
+ $rows = array_merge(array(calendar_week_header($view)), $rows);
+ return $rows;
+}
+/**
+ * Build one month.
+ */
+function calendar_build_month(&$curday, $view, $items) {
+ $month = date_format($curday, 'n');
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $weekdays = calendar_untranslated_days($items, $view);
+ date_modify($curday, '-' . strval(date_format($curday, 'j')-1) . ' days');
+ $rows = array();
+ do {
+ $init_day = clone($curday);
+ $today = date_format(date_now(date_default_timezone_name()), DATE_FORMAT_DATE);
+ $month = date_format($curday, 'n');
+ $week = date_week($curday_date);
+ $first_day = variable_get('date_first_day', 0);
+ $week_rows = calendar_build_week($curday, $view, $items, TRUE);
+ $multiday_buckets = $week_rows['multiday_buckets'];
+ $singleday_buckets = $week_rows['singleday_buckets'];
+
+ $total_rows = $week_rows['total_rows'];
+
+ // Theme each row
+ $output = "";
+ $final_day = clone($curday);
+
+ $iehint = 0;
+ $max_multirow_cnt = 0;
+ $max_singlerow_cnt = 0;
+
+ for ($i = 0; $i < $total_rows + 1; $i++) {
+ $inner = "";
+
+ // If we're displaying the week number, add it as the
+ // first cell in the week.
+ if ($i == 0 && !empty($view->date_info->style_with_weekno) && !in_array($view->date_info->granularity, array('day', 'week'))) {
+ $url = $view->get_path() .'/'. $view->date_info->year .'-W'. $week;
+ if (!empty($view->date_info->display_types['week'])) {
+ $weekno = l($week, $url, array('query' => !empty($view->date_info->append) ? $view->date_info->append : ''));
+ }
+ else {
+ // Do not link week numbers, if Week views are disabled.
+ $weekno = $week;
+ }
+ $item = array(
+ 'entry' => $weekno,
+ 'colspan' => 1,
+ 'rowspan' => $total_rows + 1,
+ 'id' => $view->name . '-weekno-' . $curday_date,
+ 'class' => 'week'
+ );
+ $inner .= theme('calendar_month_col', $item);
+ }
+
+ $curday = clone($init_day);
+
+ // move backwards to the first day of the week
+ $day_wday = date_format($curday, 'w');
+ date_modify($curday, '-' . strval((7 + $day_wday - $first_day) % 7) . ' days');
+
+ for ( $wday = 0; $wday < 7; $wday++) {
+
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $class = strtolower($weekdays[$wday]);
+ $item = NULL;
+ $in_month = !($curday_date < $view->date_info->min_date_date || $curday_date > $view->date_info->max_date_date || date_format($curday, 'n') != $month);
+
+ // Add the datebox
+ if ($i == 0) {
+ $count = $in_month ? intval(count($multiday_buckets[$wday]) + count($singleday_buckets[$wday])) : FALSE;
+ $item = array(
+ 'entry' => theme('calendar_datebox', $curday_date, $view, $items, $count),
+ 'colspan' => 1,
+ 'rowspan' => 1,
+ 'class' => 'date-box',
+ 'date' => $curday_date,
+ 'id' => $view->name . '-' . $curday_date . '-date-box'
+ );
+ $item['class'] .= ($curday_date == $today && $in_month ? ' today' : '') .
+ ($curday_date < $today ? ' past' : '') .
+ ($curday_date > $today ? ' future' : '');
+ }
+ else {
+ $index = $i - 1;
+ $multi_count = count($multiday_buckets[$wday]);
+
+ // Process multiday buckets first. If there is a multiday-bucket item in this row...
+ if ($index < $multi_count) {
+
+ // If this item is filled with either a blank or an entry...
+ if ($multiday_buckets[$wday][$index]['filled']) {
+
+ // Add item and add class
+ $item = $multiday_buckets[$wday][$index];
+ $item['class'] = 'multi-day';
+ $item['date'] = $curday_date;
+
+ // Is this an entry?
+ if (!$multiday_buckets[$wday][$index]['avail']) {
+
+ // If the item either starts or ends on today,
+ // then add tags so we can style the borders
+ if ($curday_date == $today && $in_month) {
+ $item['class'] .= ' starts-today';
+ }
+
+ // Calculate on which day of this week this item ends on..
+ $end_day = clone($curday);
+ $span = $item['colspan'] - 1;
+ date_modify($end_day, '+' . $span .' day');
+ $endday_date = date_format($end_day, DATE_FORMAT_DATE);
+
+ // If it ends today, add class
+ if ($endday_date == $today && $in_month) {
+ $item['class'] .= ' ends-today';
+ }
+ }
+ }
+
+ // If this is an acutal entry, add classes regarding the state of the
+ // item
+ if ($multiday_buckets[$wday][$index]['avail']) {
+ $item['class'] .= ' ' . $wday . ' ' . $index . ' no-entry ' . ($curday_date == $today && $in_month ? ' today' : '') .
+ ($curday_date < $today ? ' past' : '') .
+ ($curday_date > $today ? ' future' : '');
+ }
+
+ // Else, process the single day bucket - we only do this once per day
+ }
+ elseif ($index == $multi_count) {
+
+ $single_day_cnt = 0;
+ // If it's empty, add class
+ if (count($singleday_buckets[$wday]) == 0) {
+ $single_days = " ";
+ if ($max_multirow_cnt == 0 ) {
+ $class = ($multi_count > 0 ) ? 'single-day no-entry noentry-multi-day' : 'single-day no-entry';
+ }
+ else {
+ $class = 'single-day';
+ }
+ }
+ else {
+ $single_days = "";
+ foreach ($singleday_buckets[$wday] as $day) {
+ foreach ($day as $event) {
+ $single_day_cnt++;
+ $single_days .= (isset($event['more_link'])) ? '
' . $event['entry'] . '
' : $event['entry'];
+ }
+ }
+ $class = 'single-day';
+ }
+
+ $rowspan = $total_rows - $index;
+
+ // Add item...
+ $item = array(
+ 'entry' => $single_days,
+ 'colspan' => 1,
+ 'rowspan' => $rowspan,
+ 'class' => $class,
+ 'date' => $curday_date,
+ 'id' => $view->name . '-' . $curday_date . '-' . $index
+ );
+
+ // Hack for ie to help it properly space single day rows
+ if ($rowspan > 1 && $in_month && $single_day_cnt > 0) {
+ $max_multirow_cnt = max($max_multirow_cnt, $single_day_cnt);
+ }
+ else {
+ $max_singlerow_cnt = max($max_singlerow_cnt, $single_day_cnt);
+ }
+
+ // If the singlerow is bigger than the multi-row, then null out
+ // ieheight - I'm estimating that a single row is twice the size of
+ // multi-row. This is really the best that can be done with ie
+ if ($max_singlerow_cnt >= $max_multirow_cnt || $max_multirow_cnt <= $multi_count / 2 ) {
+ $iehint = 0;
+ }
+ elseif ($rowspan > 1 && $in_month && $single_day_cnt > 0) {
+ $iehint = max($iehint, $rowspan - 1); // How many rows to adjust for?
+ }
+
+ // Set the class
+ $item['class'] .= ($curday_date == $today && $in_month ? ' today' : '') .
+ ($curday_date < $today ? ' past' : '') .
+ ($curday_date > $today ? ' future' : '');
+ }
+ }
+
+ // If there isn't an item, then add empty class
+ if ($item != NULL) {
+ if (!$in_month) {
+ $item['class'] .= ' empty';
+ }
+ // Style this entry - it will be a
.
+ $inner .= theme('calendar_month_col', $item);
+ }
+
+ date_modify($curday, '+1 day');
+ }
+
+ if ($i == 0) {
+ $output .= theme('calendar_month_row', $inner, 'date-box', $iehint);
+ }
+ elseif ($i == $total_rows) {
+ $output .= theme('calendar_month_row', $inner, 'single-day', $iehint);
+ $iehint = 0;
+ $max_singlerow_cnt = 0;
+ $max_multirow_cnt = 0;
+ }
+ else {
+ // Style all the columns into a row
+ $output .= theme('calendar_month_row', $inner, 'multi-day');
+ }
+ }
+ $curday = $final_day;
+
+ // Add the row into the row array....
+ $rows[] = array('data' => $output);
+
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $curday_month = date_format($curday, 'n');
+ } while ($curday_month == $month && $curday_date <= $view->date_info->max_date_date);
+
+ // Merge the day names in as the first row.
+ $rows = array_merge(array(calendar_week_header($view)), $rows);
+ return $rows;
+}
+/**
+ * Build one week row.
+ */
+function calendar_build_mini_week(&$curday, $view, $items, $check_month = FALSE) {
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $weekdays = calendar_untranslated_days($items, $view);
+ $today = date_format(date_now(date_default_timezone_name()), DATE_FORMAT_DATE);
+ $month = date_format($curday, 'n');
+ $week = date_week($curday_date);
+ $first_day = variable_get('date_first_day', 0);
+ // move backwards to the first day of the week
+ $day_wday = date_format($curday, 'w');
+ date_modify($curday, '-' . strval((7 + $day_wday - $first_day) % 7) . ' days');
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+
+ // If we're displaying the week number, add it as the
+ // first cell in the week.
+ if (!empty($view->date_info->style_with_weekno) && !in_array($view->date_info->granularity, array('day', 'week'))) {
+ $url = date_real_url($view, NULL, $view->date_info->year .'-W'. $week);
+ if (!empty($view->date_info->display_types['week'])) {
+ $weekno = l($week, $url, array('query' => !empty($view->date_info->append) ? $view->date_info->append : ''));
+ }
+ else {
+ // Do not link week numbers, if Week views are disabled.
+ $weekno = $week;
+ }
+ $rows[$week][] = array(
+ 'data' => $weekno,
+ 'id' => $view->name . '-weekno-' . $curday_date,
+ 'class' => 'week');
+ }
+ for ($i = 0; $i < 7; $i++) {
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $class = strtolower($weekdays[$i] . ' mini');
+ if ($check_month && ($curday_date < $view->date_info->min_date_date || $curday_date > $view->date_info->max_date_date || date_format($curday, 'n') != $month)) {
+ $class .= ' empty';
+ $content = array(
+ 'date' => '',
+ 'datebox' => '',
+ 'empty' => theme('calendar_empty_day', $curday_date, $view),
+ 'link' => '',
+ 'all_day' => array(),
+ 'items' => array(),
+ );
+ }
+ else {
+ $content = calendar_build_day($curday, $view, $items);
+ $class .= ($curday_date == $today ? ' today' : '') .
+ ($curday_date < $today ? ' past' : '') .
+ ($curday_date > $today ? ' future' : '') .
+ (empty($items[$curday_date]) ? ' has-no-events' : ' has-events');
+ }
+
+ $rows[$week][] = array(
+ 'data' => $content,
+ 'class' => $class, 'id' => $view->name . '-' . $curday_date);
+ date_modify($curday, '+1 day');
+ }
+ return $rows;
+}
+/**
+ * Build one week row.
+ */
+function calendar_build_week(&$curday, $view, $items, $check_month = FALSE) {
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $weekdays = calendar_untranslated_days($items, $view);
+ $month = date_format($curday, 'n');
+ $first_day = variable_get('date_first_day', 0);
+
+ // Set up buckets
+ $total_rows = 0;
+ $multiday_buckets = array( array(), array(), array(), array(), array(), array(), array());
+ $singleday_buckets = array( array(), array(), array(), array(), array(), array(), array());
+
+ // move backwards to the first day of the week
+ $day_wday = date_format($curday, 'w');
+ date_modify($curday, '-' . strval((7 + $day_wday - $first_day) % 7) . ' days');
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+
+ for ($i = 0; $i < 7; $i++) {
+ if ($check_month && ($curday_date < $view->date_info->min_date_date || $curday_date > $view->date_info->max_date_date || date_format($curday, 'n') != $month)) {
+ $class = strtolower($weekdays[$i]) .' empty';
+ $singleday_buckets[$i][][] = array(
+ 'entry' => theme('calendar_empty_day', $curday_date, $view),
+ 'item' => NULL
+ );
+ }
+ else {
+ calendar_build_week_day($curday, $view, $items, $i, $multiday_buckets, $singleday_buckets);
+ }
+ $total_rows = max(count($multiday_buckets[$i]) + 1, $total_rows);
+ date_modify($curday, '+1 day');
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ }
+
+ $rows = array(
+ 'multiday_buckets' => $multiday_buckets,
+ 'singleday_buckets' => $singleday_buckets,
+ 'total_rows' => $total_rows);
+ return $rows;
+}
+/**
+ * Build the contents of a single day for the $rows results.
+ */
+function calendar_build_week_day($curday, $view, $items, $wday, &$multiday_buckets, &$singleday_buckets) {
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $max_events = !empty($view->date_info->style_max_items) ? $view->date_info->style_max_items : 0;
+ $hide = !empty($view->date_info->style_max_items_behavior) ? ($view->date_info->style_max_items_behavior == 'hide') : FALSE;
+ $multiday_theme = ($view->date_info->style_multiday_theme == '1');
+ $cur_cnt = 0;
+ $total_cnt = 0;
+ $types = array();
+
+ // If we are hiding, count before processing further
+ if ($max_events != CALENDAR_SHOW_ALL) {
+ foreach ($items as $date => $day) {
+ if ($date == $curday_date) {
+ foreach ($day as $time => $hour) {
+ foreach ($hour as $key => $item) {
+ $total_cnt++;
+ $types[$item->type] = $item;
+ }
+ }
+ }
+ }
+ }
+
+ // If we haven't already exceeded the max or we'll showing all, then process the items
+ if ($max_events == CALENDAR_SHOW_ALL || !$hide || $total_cnt <= $max_events) {
+ // Count currently filled items
+ foreach ($multiday_buckets[$wday] as $bucket) {
+ if (!$bucket['avail']) {
+ $cur_cnt++;
+ }
+ }
+
+ foreach ($items as $date => $day) {
+ if ($date == $curday_date) {
+ $count = 0;
+ ksort($day);
+ foreach ($day as $time => $hour) {
+ foreach ($hour as $key => $item) {
+ $count++;
+
+ // Can we add an item?
+ if ($max_events == CALENDAR_SHOW_ALL || $cur_cnt <= $max_events) {
+ $all_day = $item->calendar_start_date == $item->calendar_end_date;
+ $theme = isset($item->calendar_node_theme) ? $item->calendar_node_theme : 'calendar_'. $view->date_info->granularity .'_node';
+
+ // Parse out date part
+ $start_ydate = date_format($item->date_start, DATE_FORMAT_DATE);
+ $end_ydate = date_format($item->date_end, DATE_FORMAT_DATE);
+ $cur_ydate = date_format($curday, DATE_FORMAT_DATE);
+
+ $is_multi_day = ($start_ydate < $cur_ydate || $end_ydate > $cur_ydate);
+
+ // Does this event span multi-days?
+ if ($multiday_theme && ($is_multi_day || $all_day)) {
+
+ // If this the first day of the week, or is the start date of the multi-day event,
+ // then record this item, otherwise skip over
+ $day_no = date_format($curday, 'd');
+ if ($wday == 0 || $start_ydate == $cur_ydate || ($view->date_info->granularity == 'month' && $day_no == 1) || ($all_day && !$is_multi_day)) {
+ $cur_cnt++;
+
+ // Calculate the colspan for this event
+
+ // If the last day of this event exceeds the end of the current month or week,
+ // truncate the remaining days
+ $diff = date_difference($view->date_info->max_date, $curday, 'days');
+ $remaining_days = ($view->date_info->granularity == 'month') ? min(6 - $wday, $diff) : $diff - 1;
+ // The bucket_cnt defines the colspan. colspan = bucket_cnt + 1
+ $days = date_difference($curday, $item->date_end, 'days');
+ $bucket_cnt = max(0, min($days, $remaining_days));
+
+ // See if there is an avaiable slot to add an event. This will allow
+ // an event to precede a row filled up by a previous day event
+ $avail = FALSE;
+ $bucket_index = count($multiday_buckets[$wday]);
+ for ($i = 0; $i < $bucket_index; $i++) {
+ if ($multiday_buckets[$wday][$i]['avail']) {
+ $bucket_index = $i;
+ break;
+ }
+ }
+
+ // Add continuation attributes
+ $item->continuation = ($item->date_start < $curday);
+ $item->continues = ( $days > $bucket_cnt );
+
+ // Assign the item to the available bucket
+ $multiday_buckets[$wday][$bucket_index] = array(
+ 'colspan' => $bucket_cnt + 1,
+ 'rowspan' => 1,
+ 'filled' => TRUE,
+ 'avail' => FALSE,
+ 'all_day' => $all_day,
+ 'item' => $item,
+ 'wday' => $wday,
+ 'entry' => theme($theme, $item, $view)
+ );
+
+ // Block out empty buckets for the next days in this event for this week
+ for ($i = 0; $i < $bucket_cnt; $i++) {
+ $bucket = &$multiday_buckets[$i + $wday + 1];
+ $bucket_row_count = count($bucket);
+ $row_diff = $bucket_index - $bucket_row_count;
+
+ // Fill up the preceding buckets - these are available for future
+ // events
+ for ( $j = 0; $j < $row_diff; $j++) {
+ $bucket[($bucket_row_count + $j) ] = array(
+ 'entry' => ' ',
+ 'colspan' => 1,
+ 'rowspan' => 1,
+ 'filled' => TRUE,
+ 'avail' => TRUE,
+ 'wday' => $wday,
+ 'item' => NULL
+ );
+ }
+ $bucket[$bucket_index] = array(
+ 'filled' => FALSE,
+ 'avail' => FALSE
+ );
+ }
+ }
+ }
+ else {
+ $cur_cnt++;
+ // Assign to single day bucket
+ $singleday_buckets[$wday][$time][] = array(
+ 'entry' => theme($theme, $item, $view),
+ 'item' => $item,
+ 'colspan' => 1,
+ 'rowspan' => 1,
+ 'filled' => TRUE,
+ 'avail' => FALSE,
+ 'wday' => $wday,
+ );
+ }
+ }
+ else {
+ break; // exceeded count
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Add a more link if necessary
+ if ($max_events != CALENDAR_SHOW_ALL && $total_cnt > 0 && $cur_cnt < $total_cnt) {
+ $singleday_buckets[$wday][][] = array(
+ 'entry' => theme('calendar_'. $view->date_info->calendar_type .'_multiple_node', $curday_date, $total_cnt, $view, $types),
+ 'more_link' => TRUE,
+ 'item' => NULL
+ );
+ }
+}
+/**
+ * Build the contents of a single day for the $rows results.
+ */
+function calendar_build_day($curday, $view, $items) {
+ $curday_date = date_format($curday, DATE_FORMAT_DATE);
+ $selected = FALSE;
+ $max_events = !empty($view->date_info->style_max_items) ? $view->date_info->style_max_items : 0;
+ $types = array();
+ $inner = array();
+ $all_day = array();
+ $empty = '';
+ $link = '';
+ $count = 0;
+ foreach ($items as $date => $day) {
+ if ($date == $curday_date) {
+ $count = 0;
+ $selected = TRUE;
+ ksort($day);
+ foreach ($day as $time => $hour) {
+ foreach ($hour as $key => $item) {
+ $count++;
+ $types[$item->type] = $item;
+ if (!$view->date_info->mini && ($max_events == CALENDAR_SHOW_ALL || $count <= $max_events || ($count > 0 && $max_events == CALENDAR_HIDE_ALL))) {
+ // Theme the item here unless this is a 'Day' or 'Week' view.
+ // Day and week views need to do more processing before rendering
+ // the item, so just past them the unrendered item.
+ $theme = isset($item->calendar_node_theme) ? $item->calendar_node_theme : 'calendar_'. $view->date_info->granularity .'_node';
+ if ($item->calendar_all_day) {
+ $all_day[] = in_array($view->date_info->calendar_type, array('day', 'week')) ? $item : theme($theme, $item, $view);
+ }
+ else {
+ $key = date_format($item->date_start, 'H:i:s');
+ $inner[$key][] = in_array($view->date_info->calendar_type, array('day', 'week')) ? $item : theme($theme, $item, $view);
+ }
+ }
+ }
+ }
+ }
+ }
+ ksort($inner);
+ if (empty($inner) && empty($all_day)) {
+ $empty = theme('calendar_empty_day', $curday_date, $view);
+ }
+ // We have hidden events on this day, use the theme('calendar_multiple_') to show a link.
+ if ($max_events != CALENDAR_SHOW_ALL && $count > 0 && $count > $max_events && $view->date_info->calendar_type != 'day' && !$view->date_info->mini) {
+ if ($view->date_info->style_max_items_behavior == 'hide' || $max_events == CALENDAR_HIDE_ALL) {
+ $all_day = array();
+ $inner = array();
+ }
+ $link = theme('calendar_'. $view->date_info->calendar_type .'_multiple_node', $curday_date, $count, $view, $types);
+ }
+
+ $content = array(
+ 'date' => $curday_date,
+ 'datebox' => theme('calendar_datebox', $curday_date, $view, $items, $selected),
+ 'empty' => $empty,
+ 'link' => $link,
+ 'all_day' => $all_day,
+ 'items' => $inner,
+ );
+ return $content;
+}
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-datebox.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-datebox.tpl.php
new file mode 100644
index 0000000..cad4840
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-datebox.tpl.php
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-node.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-node.tpl.php
new file mode 100644
index 0000000..9fba39c
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-node.tpl.php
@@ -0,0 +1,58 @@
+nid
+ * that you can use to load the full object, and
+ * $node->type to tell the content type of the node.
+ *
+ * $fields
+ * An array of information for every field selected in the 'Fields'
+ * section of this view, formatted as requested in the View setup.
+ *
+ * Calendar info for this individual calendar item is in local time --
+ * the user timezone where configurable timezones are allowed and set,
+ * otherwise the site timezone. If this item has extends over more than
+ * one day, it has been broken apart into separate nodes for each calendar
+ * date and calendar_start will be no earlier than the start of
+ * the current day and calendar_end will be no later than the end
+ * of the current day.
+ *
+ * $calendar_start - A formatted datetime start date for this item.
+ * i.e. '2008-05-12 05:26:15'.
+ * $calendar_end - A formatted datetime end date for this item,
+ * the same as the start date except for fields that have from/to
+ * fields defined, like Date module dates.
+ * $calendar_start_date - a PHP date object for the start time.
+ * $calendar_end_date - a PHP date object for the end time.
+ *
+ * You can use PHP date functions on the date object to display date
+ * information in other ways, like:
+ *
+ * print date_format($calendar_start_date, 'l, j F Y - g:ia');
+ *
+ * @see template_preprocess_calendar_day_node.
+ */
+$node_class = (isset($node->class)) ? ' ' . $node->class : '';
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-overlap.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-overlap.tpl.php
new file mode 100644
index 0000000..62965c9
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day-overlap.tpl.php
@@ -0,0 +1,135 @@
+
+ * based on the number of columns presented. The values passed in will
+ * work to set the 'hour' column to 10% and split the remaining columns
+ * evenly over the remaining 90% of the table.
+ */
+//dsm('Display: '. $display_type .': '. $min_date_formatted .' to '. $max_date_formatted);
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $hour): ?>
+
+
+
+
+
+
+
+
+ $hour): ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-day.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day.tpl.php
new file mode 100644
index 0000000..25d0df9
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-day.tpl.php
@@ -0,0 +1,81 @@
+
+ * based on the number of columns presented. The values passed in will
+ * work to set the 'hour' column to 10% and split the remaining columns
+ * evenly over the remaining 90% of the table.
+ */
+//dsm('Display: '. $display_type .': '. $min_date_formatted .' to '. $max_date_formatted);
+?>
+
+
+
+
+
+
+
+
+
0 ? t('Time') : ''; ?>
+
+
+
+
+
+
+
+
+ 0 ? date_t('All day', 'datetime') : ''; ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-main.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-main.tpl.php
new file mode 100644
index 0000000..1382da4
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-main.tpl.php
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-mini.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-mini.tpl.php
new file mode 100644
index 0000000..3a4ab5f
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-mini.tpl.php
@@ -0,0 +1,47 @@
+
+
+date_info->show_title): ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-col.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-col.tpl.php
new file mode 100644
index 0000000..5124e09
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-col.tpl.php
@@ -0,0 +1,16 @@
+
+
class="" colspan="" rowspan="">
+
+
+
+
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-multiple-node.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-multiple-node.tpl.php
new file mode 100644
index 0000000..bd745b1
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-multiple-node.tpl.php
@@ -0,0 +1,28 @@
+
+
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-node.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-node.tpl.php
new file mode 100644
index 0000000..18a381f
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month-node.tpl.php
@@ -0,0 +1,64 @@
+nid
+ * that you can use to load the full object, and
+ * $node->type to tell the content type of the node.
+ *
+ * $fields
+ * An array of information for every field selected in the 'Fields'
+ * section of this view, formatted as requested in the View setup.
+ *
+ * Calendar info for this individual calendar item is in local time --
+ * the user timezone where configurable timezones are allowed and set,
+ * otherwise the site timezone. If this item has extends over more than
+ * one day, it has been broken apart into separate nodes for each calendar
+ * date and calendar_start will be no earlier than the start of
+ * the current day and calendar_end will be no later than the end
+ * of the current day.
+ *
+ * $calendar_start - A formatted datetime start date for this item.
+ * i.e. '2008-05-12 05:26:15'.
+ * $calendar_end - A formatted datetime end date for this item,
+ * the same as the start date except for fields that have from/to
+ * fields defined, like Date module dates.
+ * $calendar_start_date - a PHP date object for the start time.
+ * $calendar_end_date - a PHP date object for the end time.
+ *
+ * You can use PHP date functions on the date object to display date
+ * information in other ways, like:
+ *
+ * print date_format($calendar_start_date, 'l, j F Y - g:ia');
+ *
+ * @see template_preprocess_calendar_month_node.
+ */
+$index = 0;
+?>
+
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-month.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month.tpl.php
new file mode 100644
index 0000000..58711f4
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-month.tpl.php
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-multiple-node.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-multiple-node.tpl.php
new file mode 100644
index 0000000..e1f78bf
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-multiple-node.tpl.php
@@ -0,0 +1,27 @@
+
+
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-node.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-node.tpl.php
new file mode 100644
index 0000000..b8923bb
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week-node.tpl.php
@@ -0,0 +1,64 @@
+nid
+ * that you can use to load the full object, and
+ * $node->type to tell the content type of the node.
+ *
+ * $fields
+ * An array of information for every field selected in the 'Fields'
+ * section of this view, formatted as requested in the View setup.
+ *
+ * Calendar info for this individual calendar item is in local time --
+ * the user timezone where configurable timezones are allowed and set,
+ * otherwise the site timezone. If this item has extends over more than
+ * one day, it has been broken apart into separate nodes for each calendar
+ * date and calendar_start will be no earlier than the start of
+ * the current day and calendar_end will be no later than the end
+ * of the current day.
+ *
+ * $calendar_start - A formatted datetime start date for this item.
+ * i.e. '2008-05-12 05:26:15'.
+ * $calendar_end - A formatted datetime end date for this item,
+ * the same as the start date except for fields that have from/to
+ * fields defined, like Date module dates.
+ * $calendar_start_date - a PHP date object for the start time.
+ * $calendar_end_date - a PHP date object for the end time.
+ *
+ * You can use PHP date functions on the date object to display date
+ * information in other ways, like:
+ *
+ * print date_format($calendar_start_date, 'l, j F Y - g:ia');
+ *
+ * @see template_preprocess_calendar_week_node.
+ */
+$index = 0;
+?>
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-week.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week.tpl.php
new file mode 100644
index 0000000..dc1b3ea
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-week.tpl.php
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+ 0 || !empty($start_times)) :?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0 || !empty($start_times))) :?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $column): ?>
+
+
+
+
+
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/calendar_multiday/theme/calendar-year.tpl.php b/sites/all/modules/calendar/calendar_multiday/theme/calendar-year.tpl.php
new file mode 100644
index 0000000..2e62bea
--- /dev/null
+++ b/sites/all/modules/calendar/calendar_multiday/theme/calendar-year.tpl.php
@@ -0,0 +1,27 @@
+
+
+
'."\n";
+ }
+ }
+ }
+ return $output;
+}
+
+/**
+ * Format an empty day on a calendar
+ *
+ * @param day
+ * The day to display.
+ */
+function theme_calendar_empty_day($curday, $view) {
+
+ if ($view->date_info->calendar_type != 'day') {
+ return '
'."\n";
+ }
+ else {
+ return '
'. t('Empty day') .'
';
+ }
+}
+
+
+/**
+ * Indent items based off a nested tree structure of overlapping items
+ *
+ * @param array $overlapped_items
+ * Tree of overlapped items
+ * @param date $start
+ * Start time of the event
+ * @param date $end
+ * End tiem of the event
+ * @param array $item
+ * The event to add to the tree
+ * @param int $depth
+ * Current depth of the tree
+ * @return rc
+ * Returns an array with the max depth of the branch and whether an overlap occurred
+ */
+function _calc_indents(&$overlapped_items, $start, $end, &$item, $depth = 0) {
+
+ // Are there any items at this depth?
+ if (!empty($overlapped_items)) {
+
+ // Iterate for each item as this depth and see if we overlap
+ foreach ($overlapped_items as $index => &$entry) {
+
+ // We search depth-first, so if there are children for this item, recurse into
+ // each child tree looking for an overlap
+ if (!empty($entry['children'])) {
+ $rc = _calc_indents($entry['children'], $start, $end, $item, $depth + 1);
+
+ // Was there an overlap in the child tree?
+ if ($rc['overlap']) {
+ if (is_object($entry['item'])) {
+ $entry['item']->indent = _calc_indent($entry['depth'], $rc['max_depth']);
+ $entry['item']->max_depth = $rc['max_depth'];
+ }
+ else {
+ $entry['item']['indent'] = _calc_indent($entry['depth'], $rc['max_depth']);
+ $entry['item']['max_depth'] = $rc['max_depth'];
+ }
+
+ // There was an overlap, pop out of this depth
+ return $rc;
+ }
+ }
+
+ // No, child overlap, so check if we overlap this item
+ if ($start >= $entry['start'] && $start <= $entry['end']) {
+
+ // We overlap, create an overlapping entry
+ $entry['children'][] = array('item' => &$item, 'depth' => $depth + 1, 'start' => $start, 'end' => $end, 'children' => array());
+ if (is_object($entry['item'])) {
+ $max_depth = max($entry['item']->max_depth, $depth + 1);
+ $entry['item']->indent = _calc_indent($depth, $max_depth);
+ $entry['item']->max_depth = $max_depth;
+ }
+ else {
+ $max_depth = max($entry['item']['max_depth'], $depth + 1);
+ $entry['item']['indent'] = _calc_indent($depth, $max_depth);
+ $entry['item']['max_depth'] = $max_depth;
+ }
+ if (is_object($item)) {
+ $item->indent = _calc_indent($depth + 1, $max_depth);
+ $item->max_depth = $max_depth;
+ }
+ else {
+ $item['indent'] = _calc_indent($depth + 1, $max_depth);
+ $item['max_depth'] = $max_depth;
+ }
+
+ // We overlap, so pop out of this depth
+ return array('overlap' => TRUE, 'max_depth' => $max_depth);
+ }
+ }
+
+ // If there are items at this depth, but no overlap, then return no overlap and pop
+ // out of this depth
+ if ($depth > 0) {
+ return array('overlap' => FALSE, 'max_depth' => 0);
+ }
+ }
+
+ // No overlap at any depth, reset the array of overlaps
+ if ($depth == 0) {
+ reset($overlapped_items);
+ $overlapped_items[0] = array('item' => &$item, 'depth' => $depth, 'start' => $start, 'end' => $end, 'children' => array());
+ }
+ else {
+ $overlapped_items[] = array('item' => &$item, 'depth' => $depth, 'start' => $start, 'end' => $end, 'children' => array());
+ }
+
+ if (is_object($item)) {
+ $item->indent = _calc_indent($depth, $depth);
+ $item->max_depth = $depth;
+ }
+ else {
+ $item['indent'] = _calc_indent($depth, $depth);
+ $item['max_depth'] = $depth;
+ }
+ return array('overlap' => FALSE, 'max_depth' => $depth);
+}
+
+/**
+ * Calculates the indent based of the current depth and the depth of this branch in the tree
+ *
+ * @param int $cur_depth
+ * @param int $depth
+ * @return number
+ */
+function _calc_indent( $cur_depth, $depth ) {
+ return round(10 * $cur_depth / ($depth + 1));
+}
+/** @} End of addtogroup themeable */
diff --git a/sites/all/modules/calendar/help/attachments.html b/sites/all/modules/calendar/help/attachments.html
new file mode 100644
index 0000000..3535cc2
--- /dev/null
+++ b/sites/all/modules/calendar/help/attachments.html
@@ -0,0 +1 @@
+
Views 2 lets you combine a number of 'displays' together in one view, including, potentially, more than one page display. Each page display can be a regular page display, with its own url, or an 'attachment' to another display. Attachments are basically one or more views that all appear at the same url of the page they are attached to, one after the other. So the calendar now creates one display that creates the back/next navigation, and attaches to it a year, month, week, or day display with the calendar for the right period.
+Settings are used to override some values of the view.
+
The primary setting that is useful here is a setting for 'block_identifier'. The view's block_identifier is used to control individual instances of regular and embedded views that contain date navigation so that they move separately or together. All views that use the same identifier will move together.
+All views that use different identifiers will move independently. The identifier will show up in the url as a querystring, like node/275?mini=calendar/2008-10.
+Page views use no block identifier, the normal identifier of the block view is 'mini'.
Create a new calendar by enabling the default calendar view and changing it to use whatever date you want in your calendar. You can create multiple calendars by cloning the default calendar view as many times as necessary.
+
+
The calendar uses the Generic Date argument. This argument has an option to select one or more Views date fields to filter on, automatically adds them to the view, and then filters the view by the value of the selected field(s). This argument can be used on any view, not just calendar views.
+
+
Unlike previous versions of the Calendar module, there is just a single argument instead of year, month, and day arguments. The argument value will be YYYY-MM-DD for a day, YYYY-MM for a month, YYYY for a year, and YYYY-W99 for a week. There is a default option to set the argument to the current date when the argument is empty.
+
+
A calendar display creates calendar navigation and links to multiple displays for the year, month, day, or week views. The actual displays are created by attaching calendar views that use whatever styles are desired for those pages.
+
+
Calendar views are attachments (note 1) to create the year, month, day, and week displays. They can be set to use any style, either a calendar style or any other Views style, like teasers or lists. They can each have their own fields and formatting. They must be attached to the main calendar page or to a calendar block.
+
+
If you don't want to have a link to a week display, just remove the week display from the view. Ditto for any other displays you don't want to use. The links will automatically disappear for any displays that are not defined in the view.
+
+
A calendar block will create a calendar block for the view results. This block requires the calendar argument to do its work, and uses one of the year, month, day, or week calendar view attachments created above.
+
+
Earlier versions required that you add the date field to the 'Fields' section of the view, but this version does not require that. Add the field to the view if you want it displayed in the results, otherwise you can leave it out. The Calendar no longer over-writes normal formatting for that field, it will be displayed however you set it up in the view.
+
+
There are templates for the top of the calendar (the links and navigation), the year, month, day, and week displays, and the individual month, week, and day nodes, so you can easily style them.
If the Calendar iCal module is enabled, the default Calendar view will include an iCal display that you can use to create iCal exports of your calendar.
+
To use the iCal export, look for the iCal display in the calendar. The default iCal feed uses a Date filter set to show events greater to or equal to 'now'. Find the date filter on the iCal display and change it to use the date(s) used in the calendar. Then attach the iCal feed to the Calendar Page and/or the Calendar Block.
\ No newline at end of file
diff --git a/sites/all/modules/calendar/help/ical-import.html b/sites/all/modules/calendar/help/ical-import.html
new file mode 100644
index 0000000..d017721
--- /dev/null
+++ b/sites/all/modules/calendar/help/ical-import.html
@@ -0,0 +1,4 @@
+
To import nodes from an iCal feed, follow the iCal Import instructions.
+
After importing, the imported nodes now exist as regular date fields that can be added to your calendar.
+
+
\ No newline at end of file
diff --git a/sites/all/modules/calendar/help/ical.html b/sites/all/modules/calendar/help/ical.html
new file mode 100644
index 0000000..1491485
--- /dev/null
+++ b/sites/all/modules/calendar/help/ical.html
@@ -0,0 +1 @@
+The Calendar module can take advantage of the iCal standard to either export or import ical feeds.
\ No newline at end of file
diff --git a/sites/all/modules/calendar/help/images/calendar_colors.jpg b/sites/all/modules/calendar/help/images/calendar_colors.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..425d4118ea55cadde08dfcb90a977d83488f6c57
GIT binary patch
literal 50004
zcmeFY1yo$kwl3PZ6Er|@Xo3?wxCZGE+$~tprqSTR6B3~D-~UYjv-(Ro|>Rt7=L;%si|B2wuvAVParlU}0fm_9AfX|8`@6$`evpt+P|?saFtM<45Cy6U0LVxvD9ETNXlSUYh|<1@d;lsT
z8WBB@G&-@m83uzh32$J`S4>8kiZ)V>u_GX#xl0fh_G2<~iYH7@nORub_yq)?3ki$J
zzL1kwPz1fy)Y8_`)zdeycw=d0ZDVWa`qs_e!_&(<`2B~FkDo%rV&gu?CnP2%r(|X4
zUh!U!l31)-kZ1d=}#U2
znKJ$>FP3kOX^%oY!S?~j4}d=&X~r=EqbS#sz3SY)so$;v&9
z+r~#X`wxKb#2dj*|AB9aQuDWV4x$wF)37vho$?E}qz6Ev^8>)Q_Hz6#Xw-k8?vEli
zb$WvfEDP+Kdpa$rt^Ui(_x!$L)Ayc_Znj&x!#_ZOv`4g8OLT!B0Ad(-XUl5}Go}8U
z0f?%pw}`3(|5sIIBdM*9v`VH6wRCLS3E;U-nY$q^zdfS;HQ^sYYhL{TNJqK9c0A7d
zY4OY{+o@Ew!r%cgf`lOX^UJXdc9W|W$-}${z!R>=yuYxYV^99O^1li8ZzlOaCm4Lk
z@~k#FJUobdCVKv@pWy>wTJGMwMiCC<_3v44xqEA}!EO_&40y`YMV?IpFo&v#@kpT~
z9!N~pkivN6(a8Tu43uX9APOKuu>m~tEUnqd0l4a6+$^n`C?tp~f&UdXiYDwHN535F
zJrJ#mV2S)pDKe~#$Dt^CUY>!)8z*M
zmE%$NjX}q~&jVmB;+{nR!$4g&snY*UA+^H!BN=Vk>kO5Z0tJ^+l#uEORS5q+(Pe-g!RPj`-xb}d?)C~d
z!{B174*<;CTV`F_qtE_DHzcoBua|$+f4?ukp1gLse7XAy#(#(*@$A5Unf>N42`O+e
z4d0M90=Q3keV+|ps?Farfi=12fh@&DxQZ#4yEwondD5B;#Sjj`TGX?VQsvc0#CYhO
zRx5T`{G*?AC_$XPdS3$R9@F|bp`Ndim$__^8I%oC!@9Bfv2ch<7^R+D_7KB$>ChtUR?@m?s4X;m`-aQxbF*bnBO=~tbO~o4e
zfb-=&!uts;gvyyuNX?$>L
zzBG&*lgQM-M3h|0*O)*YDsBa8D2=
zVT)8*c#8^4Ph7=g*Z-bysQLr+HT=#DP^el!M|h?CXf+kYAE7H7Yph%~fFsI7LS|xq
z^Agw*gnhvz)po((dq3Imw56;j-__fpG+~@#sSEO=D{{&WupY1ojTUcEyPm(^{}r_D
zzk5%KlOw$fIfJjGqblYh#c>C*=;>40Oci24)|t|e8%e~*~6DP0_4d$O-ZPdgt8U-e>Nl}QY;kfvOSCFO{v3`)PMA{r!
zk4g%h#z^<19!68(`kve2##E9Lk+smBn}QT29ldDi@otX;{j69pzC>SpA<`G
zY`yemPkka-pT7$OxtcjsC2LzlMG~XLQ36!(Y|Sg)apEnee}v>O=_@%h=*p8L~HPg9O_qBPH~)Fy-0_^+$+np#h+6h$3=^G$(3CO
zbx2pFgTqtJoMQN64Esc~l>$et(^aWZ^q-`Mm+lbRC8{fdarp9Qvto%3UNE~5tV)q_
z)}7$kyR7xCZC8RWOU-S7HBXgnTid9I;zc_4LM&&CKo9{$_(4`2HdaX
zD}kE8ih?M@y_xwW0;E22)OScGzm7nN5VVzS)u|6j+
zf+ec=c%d|!J(lC}MF*?+sx03qJIHks$vnlYW}rXb0jXyUS9#Pkk|{+SzN1!21PgDG^z$37$g|9XXh?IQ=!gX
zr~E!J_PI3$fcR2Z()a7@g$UDd?(SXn>SPq&cVqd9b?H732T87KP3@}sis`Jn*uG8B
zc}@yu_M5?^8b(G}04DoFWX8*C^5zy;#^xnfO-s4S$*oG0owtu3<*~25{m0uTti*xc
zs2^!=t0`{2Joe*9JAy&5SMQUC8!0K6@zSVF@8#>4_aYPzCL@w@-PC<90NZt$P=&tX
zp{uLwwPpUotYuYyh!0cZ=cwY;?pk*lGifZT9@L1g05Rf8pRoa&2LLQ%x|iz#P@Zvq
zDp2(RAl|zEatqU`y*LzeAk}*Hap+3ck{e_eJUs*JW+zq+IvD5_$-7~FJ$GT5%%vV@
zzAB(W{&+F1+|)a4zUx(KZb_DM4EP~9`KfAs2i(vCd7uRL3;v1_XxGOY+N25`=PG?Nd9Lql;+&1;()zn7w(qe
z0rQ4F1yj~>nPb>`0`W7i-*^<0mqZ|Q$_SOE+`T~u)yiAzz3*}lycuDKGt;e6SENjL
zy@*c_mPRN6EM4>=|EwSUgR=1d^ner}ERV;<(gk>mN6ufDO@f550rf1pZuXtJTJH{=