PHPackages                             dynamic/silverstripe-calendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dynamic/silverstripe-calendar

ActiveSilverstripe-vendormodule[Utility &amp; Helpers](/categories/utility)

dynamic/silverstripe-calendar
=============================

A calendar module for the SilverStripe CMS.

2.1.0(5mo ago)33.0k↓100%4[2 issues](https://github.com/dynamic/silverstripe-calendar/issues)[6 PRs](https://github.com/dynamic/silverstripe-calendar/pulls)BSD-3-ClausePHPCI passing

Since May 21Pushed 1mo ago6 watchersCompare

[ Source](https://github.com/dynamic/silverstripe-calendar)[ Packagist](https://packagist.org/packages/dynamic/silverstripe-calendar)[ RSS](/packages/dynamic-silverstripe-calendar/feed)WikiDiscussions 2 Synced today

READMEChangelog (10)Dependencies (12)Versions (29)Used By (0)

SilverStripe Calendar
=====================

[](#silverstripe-calendar)

A comprehensive calendar module for the SilverStripe CMS with event management, recurring events, and category organization.

[![CI](https://github.com/dynamic/silverstripe-calendar/actions/workflows/ci.yml/badge.svg)](https://github.com/dynamic/silverstripe-calendar/actions/workflows/ci.yml)[![codecov](https://camo.githubusercontent.com/e12bfd1f6b2aa46dcbf7a43b50ab0251923fc154f120a843268ed660f48b73d6/68747470733a2f2f636f6465636f762e696f2f67682f64796e616d69632f73696c7665727374726970652d63616c656e6461722f6272616e63682f322f67726170682f62616467652e737667)](https://codecov.io/gh/dynamic/silverstripe-calendar)

[![Latest Stable Version](https://camo.githubusercontent.com/6f3c5ada2b30f6e60e8765ed47cb1728bb2c1392e8cdac5b099612c4d1706c93/68747470733a2f2f706f7365722e707567782e6f72672f64796e616d69632f73696c7665727374726970652d63616c656e6461722f762f737461626c65)](https://packagist.org/packages/dynamic/silverstripe-calendar)[![Total Downloads](https://camo.githubusercontent.com/7c2095ca77d731172d5abf03df418c3dded7df3c0c6529d8e75c3d9025b9c507/68747470733a2f2f706f7365722e707567782e6f72672f64796e616d69632f73696c7665727374726970652d63616c656e6461722f646f776e6c6f616473)](https://packagist.org/packages/dynamic/silverstripe-calendar)[![Latest Unstable Version](https://camo.githubusercontent.com/fd898b6e85bd3d24124080f19d230c984079082cf79d1f00a3afc55237baa709/68747470733a2f2f706f7365722e707567782e6f72672f64796e616d69632f73696c7665727374726970652d63616c656e6461722f762f756e737461626c65)](https://packagist.org/packages/dynamic/silverstripe-calendar)[![License](https://camo.githubusercontent.com/d14fc8dd9d65911b800397c941d67d82d263bff4df0ee951e6b4395ac9774762/68747470733a2f2f706f7365722e707567782e6f72672f64796e616d69632f73696c7665727374726970652d63616c656e6461722f6c6963656e7365)](https://packagist.org/packages/dynamic/silverstripe-calendar)

Requirements
------------

[](#requirements)

- SilverStripe CMS ^5.0
- SilverStripe Lumberjack ^3.0
- Nesbot Carbon ^3.0
- Symbiote GridField Extensions ^4.0
- Symbiote Queued Jobs ^5.0
- Uncle Cheese Display Logic ^3.0
- Ryan Potter Color Field ^1.0
- DFT Frontend MultiSelectField ^1.0

Installation
------------

[](#installation)

```
composer require dynamic/silverstripe-calendar
```

After installation, run `/dev/build?flush=all` to update your database.

License
-------

[](#license)

See [License](LICENSE.md)

Features
--------

[](#features)

- **Event Management**: Create and manage events with comprehensive details
- **Recurring Events**: Support for complex recurring event patterns using Carbon
- **Category Organization**: Organize events with color-coded categories
- **Calendar Display**: Multiple view modes (month, week, day, list)
- **Event Search &amp; Filtering**: Advanced filtering by category, date range, and keywords
- **Admin Interface**: Comprehensive CMS interface for event management
- **Lumberjack Integration**: Nested event management within calendar pages
- **Frontend Calendar**: Interactive JavaScript calendar interface
- **Event Categories**: Color-coded categorization system
- **Responsive Design**: Mobile-friendly calendar views

Usage
-----

[](#usage)

### Basic Setup

[](#basic-setup)

1. **Create a Calendar Page**: In the CMS, create a new page of type "Calendar"
2. **Configure Categories**: Use the Calendar Admin to create event categories
3. **Add Events**: Create events either through the Calendar Admin or as child pages of your Calendar page

### Calendar Page

[](#calendar-page)

The Calendar page serves as the main container for your events and provides the frontend calendar interface.

### Event Management

[](#event-management)

Events can be managed in two ways:

#### Calendar Admin Interface

[](#calendar-admin-interface)

Access through CMS Admin → Calendar to manage:

- Event Pages
- Categories

#### Lumberjack Interface

[](#lumberjack-interface)

Manage events as child pages directly within your Calendar page for a hierarchical approach.

### Event Categories

[](#event-categories)

Create color-coded categories to organize your events:

- Assign colors for visual distinction
- Filter events by category
- Organize events by type, department, or any classification system

### Recurring Events

[](#recurring-events)

The module supports complex recurring patterns:

- Daily, weekly, monthly, yearly recurrence
- Custom recurrence rules using Carbon date manipulation
- Exception dates for holidays or special circumstances
- End dates or occurrence limits

Frontend Integration
--------------------

[](#frontend-integration)

### Hybrid Calendar Architecture

[](#hybrid-calendar-architecture)

The module provides a hybrid frontend approach:

- **Primary Interface**: Interactive FullCalendar.js for calendar views
- **Server-Side Support**: Traditional templates for custom implementations
- **Responsive Design**: Mobile-friendly across all view modes

### FullCalendar Integration

[](#fullcalendar-integration)

The default `Calendar.ss` template includes an interactive calendar powered by FullCalendar with:

- Event navigation and filtering
- Category-based color coding
- Responsive month/week/day views
- Event details modal/popover
- AJAX event loading

### Custom Template Implementation

[](#custom-template-implementation)

For custom implementations without FullCalendar, you can create server-side event listings:

```

      $Title
      $StartDate.Nice
      $Category.Title
      $Content.Summary(100)

        Previous

          $PageNum

          $PageNum

        Next

```

The `events_per_page` configuration controls server-side pagination for custom templates.

### Template Customization

[](#template-customization)

Override templates by copying them to your theme:

- `Calendar.ss` - Main calendar page template
- `EventPage.ss` - Individual event template
- Calendar JavaScript components in `client/dist/`

Configuration
-------------

[](#configuration)

### Basic Configuration

[](#basic-configuration)

```
# mysite/_config/calendar.yml
Dynamic\Calendar\Page\Calendar:
  # Default events per page
  events_per_page: 10

Dynamic\Calendar\Page\EventPage:
  # Default event duration in hours
  default_duration: 1
```

### Timezone Configuration

[](#timezone-configuration)

**IMPORTANT**: If your events are stored in a timezone other than UTC, you must configure the timezone to ensure ICS calendar feeds display correct times.

```
# app/_config/calendar.yml (or mysite/_config/calendar.yml for older projects)
Dynamic\Calendar\Controller\CalendarController:
  # Timezone for event storage and ICS conversion
  # Use PHP timezone identifiers: https://www.php.net/manual/en/timezones.php
  timezone: 'America/Chicago'  # Central Time (US)
```

**How it works**:

- Event times are stored in your database in the configured timezone (e.g., 8:00 AM Central Time)
- When generating ICS feeds, times are parsed in the configured timezone and converted to UTC
- Calendar applications (Google Calendar, Outlook, Apple Calendar) receive UTC times and display them in the user's local timezone

**Common timezone examples**:

- `'America/New_York'` - Eastern Time (US)
- `'America/Chicago'` - Central Time (US)
- `'America/Denver'` - Mountain Time (US)
- `'America/Los_Angeles'` - Pacific Time (US)
- `'Europe/London'` - Greenwich Mean Time
- `'Australia/Sydney'` - Australian Eastern Time

**Note**: If not configured, the default timezone is `UTC`.

### Category Configuration

[](#category-configuration)

Categories support color customization and can be managed through the Calendar Admin interface.

### Recurring Events Configuration

[](#recurring-events-configuration)

Configure default recurrence options:

```
Dynamic\Calendar\Model\RecurringEvent:
  # Maximum occurrences to generate
  max_occurrences: 500
  # Default recurrence end date (months from start)
  default_end_months: 12
```

### Template Configuration

[](#template-configuration)

The module templates use vanilla Bootstrap classes and should work out of the box. To disable theme-specific configurations for testing:

```
# mysite/_config/calendar-templates.yml
Dynamic\Calendar\Page\Calendar:
  # Disable theme template overrides
  use_theme_templates: false

# For custom implementations without FullCalendar
Dynamic\Calendar\Page\Calendar:
  # Enable server-side event listing instead of FullCalendar
  enable_fullcalendar: false
```

Development
-----------

[](#development)

### Frontend Development

[](#frontend-development)

The module includes a webpack-based build system for frontend assets:

```
# Install dependencies
npm install

# Development build
npm run build:dev

# Production build
npm run build

# Watch for changes
npm run watch
```

### Testing

[](#testing)

Run the test suite:

```
# PHPUnit tests
vendor/bin/phpunit

# Code quality
vendor/bin/phpcs src/ tests/ --standard=phpcs.xml.dist
vendor/bin/phpstan analyse src/ --configuration=phpstan.neon.dist
```

Upgrading
---------

[](#upgrading)

### From Version 1.x

[](#from-version-1x)

When upgrading from version 1.x, run the datetime conversion task:

```
sake dev/tasks/calendar-datetime-conversion-task
```

This migrates datetime data to separate date and time fields.

### From Earlier 2.x Versions

[](#from-earlier-2x-versions)

- Ensure Carbon ^3.0 compatibility
- Review recurring event configurations
- Run `/dev/build` to apply database changes

Troubleshooting
---------------

[](#troubleshooting)

### Common Issues

[](#common-issues)

**Events not displaying**:

- Ensure `/dev/build?flush=all` has been run
- Check event date ranges and publication status

**JavaScript calendar not loading**:

- Verify frontend assets are built (`npm run build`)
- Check browser console for JavaScript errors

**Recurring events not generating**:

- Verify queued jobs are configured and running
- Check recurring event configuration and Carbon date logic

### Performance Optimization

[](#performance-optimization)

For large numbers of events:

- Enable query caching in your environment
- Consider pagination limits
- Use category filtering to reduce load

Contributing
------------

[](#contributing)

We welcome contributions! Please read our [contributing guidelines](CONTRIBUTING.md) and:

1. Fork the repository
2. Create a feature branch
3. Write tests for new functionality
4. Ensure code quality standards are met
5. Submit a pull request

Maintainers
-----------

[](#maintainers)

- [Dynamic](https://www.dynamicagency.com) ()

Bugtracker
----------

[](#bugtracker)

Bugs are tracked in the issues section of this repository. Before submitting an issue please read over existing issues to ensure yours is unique.

If the issue does look like a new bug:

- Create a new issue
- Describe the steps required to reproduce your issue, and the expected outcome. Unit tests, screenshots and screencasts can help here.
- Describe your environment as detailed as possible: SilverStripe version, Browser, PHP version, Operating System, any installed SilverStripe modules.

Development and Contribution
----------------------------

[](#development-and-contribution)

If you would like to make contributions to the module please ensure you raise a pull request and discuss with the module maintainers.

Related Modules
---------------

[](#related-modules)

- [SilverStripe Elemental Calendar](https://github.com/dynamic/silverstripe-elemental-dynamic-calendar) - Elemental block integration

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance68

Regular maintenance activity

Popularity24

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 56.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~214 days

Recently: every ~19 days

Total

12

Last Release

137d ago

Major Versions

1.x-dev → 2.0.02025-06-18

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/867942?v=4)[Dynamic](/maintainers/dynamic)[@dynamic](https://github.com/dynamic)

---

Top Contributors

[![jsirish](https://avatars.githubusercontent.com/u/1163643?v=4)](https://github.com/jsirish "jsirish (56 commits)")[![muskie9](https://avatars.githubusercontent.com/u/870751?v=4)](https://github.com/muskie9 "muskie9 (30 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (13 commits)")

---

Tags

carbonhacktoberfestsilverstripeeventssilverstripemodulecalendar

###  Code Quality

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/dynamic-silverstripe-calendar/health.svg)

```
[![Health](https://phpackages.com/badges/dynamic-silverstripe-calendar/health.svg)](https://phpackages.com/packages/dynamic-silverstripe-calendar)
```

###  Alternatives

[unclecheese/eventcalendar

Event Calendar for the SilverStripe CMS

3215.2k7](/packages/unclecheese-eventcalendar)[silverstripe/event-calendar

Event Calendar for the SilverStripe CMS

318.5k2](/packages/silverstripe-event-calendar)[moe/full-calendar

A lightweight calendar module for Silverstripe. Implements the popular javascript http://fullcalendar.io/ library.

121.5k](/packages/moe-full-calendar)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
