xima-media/ical-bundle

There is no license information available for the latest version (0.2.3) of this package.

The XIMA iCal Bundle

Installs: 745

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 15

Forks: 0

Open Issues: 0

Type:symfony-bundle

0.2.3 2023-12-19 15:46 UTC

This package is auto-updated.

Last update: 2024-04-20 07:04:26 UTC


README

Wraps the eluceo/ical package to a Symfony Bundle with Doctrine Association Mappings and includes Sonata Admin classes.

Installation

composer require xima-media/ical-bundle

Notes:

Load the bundle in app/AppKernel.php:

public function registerBundles()
{
    $bundles = array(
    ...
    new Xima\ICalBundle\XimaICalBundle()
}

Configuration

Your projects needs to support the dbal types json and dateinterval, configured in your app/config/config.yml, e.g.:

doctrine:
    dbal:
      ...
      types:
            json: Sonata\Doctrine\Types\JsonType
            dateinterval:  Herrera\Doctrine\DBAL\Types\DateIntervalType

Integration

1. Create en event entity

You need to create a custom Event class that inherits from ICalBundle's Event class, e.g.:

<?php
use Doctrine\ORM\Mapping as ORM;

/**
 * ICalEvent.
 *
 * @ORM\Entity
 */
class ICalEvent extends \Xima\ICalBundle\Entity\Component\Event
{

}

Note: ORM auto_mapping should be enabled or configure XimaICalBundle manually in app/config/config.yml.

2. Update your database schema

Use your the method of choice to update your database schema, e.g. doctrine migrations.

Sonata Admin classes

Documentation to be done. Take a look, use or inherit from the admin classes in xima-media\ical-bundle\Admin\EventAdmin.php and xima-media\ical-bundle\Admin\RecurrenceRuleAdmin.php.

Usage

Get all events in cal format
/**
 * @Route("/ical")
 * Render all events as iCalendar
 */
protected function iCalAction(Array $events)
{
    $vCalendar = new \Eluceo\iCal\Component\Calendar('myCalendar');

    foreach ($events as $event) {
        $vCalendar->addComponent($event);
    }
    
    $response = new Response();
    $response->headers->set('Content-Type', 'text/calendar; charset=utf-8');
    $response->headers->set('Content-Disposition', 'inline; filename="cal.ics"');
    $response->setContent($vCalendar->render());

    return $response;
}