%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/controllers/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/controllers/IcalController.php

<?php


namespace humhub\modules\calendar\controllers;

use humhub\components\access\ControllerAccess;
use Yii;
use yii\base\Exception;
use yii\web\HttpException;
use yii\web\NotFoundHttpException;
use humhub\components\Controller;
use humhub\modules\calendar\helpers\CalendarUtils;
use humhub\modules\calendar\helpers\RecurrenceHelper;
use humhub\modules\calendar\interfaces\CalendarService;
use humhub\modules\calendar\interfaces\event\CalendarEventIF;
use humhub\modules\calendar\interfaces\recurrence\RecurrentEventIF;
use humhub\modules\calendar\interfaces\VCalendar;
use humhub\modules\content\models\Content;


class IcalController extends Controller
{
    /**
     * @var CalendarService
     */
    public $calendarService;

    const EXPORT_MIME = 'text/calendar';

    /**
     * @return array
     */
    public function getAccessRules()
    {
        return [
            [ControllerAccess::RULE_LOGGED_IN_ONLY]
        ];
    }

    public function init()
    {
        parent::init();
        $this->calendarService =  Yii::$app->getModule('calendar')->get(CalendarService::class);
    }

    /**
     * @param $id
     * @return \yii\console\Response|\yii\web\Response
     * @throws Exception
     * @throws HttpException
     * @throws \Throwable
     * @throws \yii\web\RangeNotSatisfiableHttpException
     */
    public function actionExport($id)
    {
        $event = $this->getEvent($id);

        if(RecurrenceHelper::isRecurrent($event) && !RecurrenceHelper::isRecurrentRoot($event)) {
            /* @var $event RecurrentEventIF */
            $event = $event->getRecurrenceQuery()->getRecurrenceRoot();
        }

        $uid = $event->getUid() ?: $this->uniqueId;

        return Yii::$app->response->sendContentAsFile(VCalendar::withEvents($event, CalendarUtils::getSystemTimeZone(true))->serialize(), $uid.'.ics', ['mimeType' => static::EXPORT_MIME]);

    }

    public function actionGenerateics()
    {
        $calendarEntry = $this->getCalendarEntry(Yii::$app->request->get('id'));
        $ics = $calendarEntry->generateIcs();
        return Yii::$app->response->sendContentAsFile($ics, uniqid() . '.ics', ['mimeType' => static::EXPORT_MIME]);
    }

    /**
     * @param $id
     * @return CalendarEventIF
     * @throws HttpException
     * @throws \Throwable
     * @throws Exception
     */
    public function getEvent($id)
    {
        $content = Content::findOne(['id' => $id]);

        if(!$content) {
            throw new NotFoundHttpException();
        }

        if(!$content->canView()) {
            throw new HttpException(403);
        }

        $model = $content->getModel();

        if(!$model) {
            throw new NotFoundHttpException();
        }

        $event = CalendarUtils::getCalendarEvent($model);

        if(!$event) {
            throw new HttpException(400, 'Selected content does not implement calendar interface');
        }

        return $event;
    }
}

Zerion Mini Shell 1.0