mirror of
https://github.com/grocy/grocy.git
synced 2025-04-29 17:45:39 +00:00
Was a problemw when returning images and there were leading empty lines in config.php which seem to get added to the response always...
82 lines
2.5 KiB
PHP
82 lines
2.5 KiB
PHP
<?php
|
|
|
|
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
|
|
{
|
|
$events = $this->getCalendarService()->GetEvents();
|
|
|
|
$vCalendar = new Calendar();
|
|
foreach ($events as $event)
|
|
{
|
|
$description = '';
|
|
if (isset($event['description']))
|
|
{
|
|
$description = $event['description'];
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
$vEvent = new Event();
|
|
$vEvent->setOccurrence($vEventOccurrence)
|
|
->setSummary($event['title'])
|
|
->setDescription($description);
|
|
|
|
$vCalendar->addEvent($vEvent);
|
|
}
|
|
|
|
ob_clean(); // Make sure to ONLY return the file
|
|
$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"');
|
|
}
|
|
catch (\Exception $ex)
|
|
{
|
|
return $this->GenericErrorResponse($response, $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function IcalSharingLink(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response, array $args)
|
|
{
|
|
try
|
|
{
|
|
return $this->ApiResponse($response, [
|
|
'url' => $this->AppContainer->get('UrlManager')->ConstructUrl('/api/calendar/ical?secret=' . $this->getApiKeyService()->GetOrCreateApiKey(\Grocy\Services\ApiKeyService::API_KEY_TYPE_SPECIAL_PURPOSE_CALENDAR_ICAL))
|
|
]);
|
|
}
|
|
catch (\Exception $ex)
|
|
{
|
|
return $this->GenericErrorResponse($response, $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function __construct(\DI\Container $container)
|
|
{
|
|
parent::__construct($container);
|
|
}
|
|
}
|