mirror of
https://github.com/grocy/grocy.git
synced 2025-10-12 16:44:55 +00:00
Upgraded eluceo/ical
This commit is contained in:
@@ -2,44 +2,54 @@
|
||||
|
||||
namespace Grocy\Controllers;
|
||||
|
||||
use Eluceo\iCal\Domain\Entity\Calendar;
|
||||
use Eluceo\iCal\Domain\Entity\Event;
|
||||
use Eluceo\iCal\Domain\ValueObject\Date;
|
||||
use Eluceo\iCal\Domain\ValueObject\DateTime;
|
||||
use Eluceo\iCal\Domain\ValueObject\SingleDay;
|
||||
use Eluceo\iCal\Domain\ValueObject\TimeSpan;
|
||||
use Eluceo\iCal\Presentation\Factory\CalendarFactory;
|
||||
|
||||
class CalendarApiController extends BaseApiController
|
||||
{
|
||||
public function Ical(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
||||
{
|
||||
try
|
||||
{
|
||||
$vCalendar = new \Eluceo\iCal\Component\Calendar('grocy');
|
||||
|
||||
$events = $this->getCalendarService()->GetEvents();
|
||||
|
||||
$vCalendar = new Calendar();
|
||||
foreach ($events as $event)
|
||||
{
|
||||
$date = new \DateTime($event['start']);
|
||||
$date->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
||||
|
||||
if ($event['date_format'] === 'date')
|
||||
{
|
||||
$date->setTime(23, 59, 59);
|
||||
}
|
||||
|
||||
$description = '';
|
||||
if (isset($event['description']))
|
||||
{
|
||||
$description = $event['description'];
|
||||
}
|
||||
|
||||
$vEvent = new \Eluceo\iCal\Component\Event();
|
||||
$vEvent->setDtStart($date)
|
||||
->setDtEnd($date)
|
||||
->setSummary($event['title'])
|
||||
->setDescription($description)
|
||||
->setNoTime($event['date_format'] === 'date' || (isset($event['allDay']) && $event['allDay']))
|
||||
->setUseTimezone(true);
|
||||
if ($event['date_format'] === 'date' || (isset($event['allDay']) && $event['allDay']))
|
||||
{
|
||||
// All-day event
|
||||
$date = new Date(\DateTimeImmutable::createFromFormat('Y-m-d', $event['start']));
|
||||
$vEventOccurrence = new SingleDay($date);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Time-point event
|
||||
$start = new DateTime(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $event['start']), false);
|
||||
$end = new DateTime(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $event['start']), false);
|
||||
$vEventOccurrence = new TimeSpan($start, $end);
|
||||
}
|
||||
|
||||
$vCalendar->addComponent($vEvent);
|
||||
$vEvent = new Event();
|
||||
$vEvent->setOccurrence($vEventOccurrence)
|
||||
->setSummary($event['title'])
|
||||
->setDescription($description);
|
||||
|
||||
$vCalendar->addEvent($vEvent);
|
||||
}
|
||||
|
||||
$response->write($vCalendar->render());
|
||||
$response->write((new CalendarFactory())->createCalendar($vCalendar));
|
||||
$response = $response->withHeader('Content-Type', 'text/calendar; charset=utf-8');
|
||||
return $response->withHeader('Content-Disposition', 'attachment; filename="grocy.ics"');
|
||||
}
|
||||
|
Reference in New Issue
Block a user