nextcloud-calendar/lib/Controller/ViewController.php

120 lines
3.6 KiB
PHP

<?php
declare(strict_types=1);
/**
* Calendar App
*
* @author Georg Ehrke
* @copyright 2019 Georg Ehrke <oc.list@georgehrke.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Calendar\Controller;
use OCP\App\IAppManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IRequest;
/**
* Class ViewController
*
* @package OCA\Calendar\Controller
*/
class ViewController extends Controller {
/**
* @var IConfig
*/
private $config;
/**
* @var string
*/
private $userId;
/**
* @var IAppManager
*/
private $appManager;
/**
* @param string $appName
* @param IRequest $request an instance of the request
* @param IAppManager $appManager
* @param IConfig $config
* @param string $userId
*/
public function __construct(string $appName,
IRequest $request,
IConfig $config,
IAppManager $appManager,
?string $userId) {
parent::__construct($appName, $request);
$this->config = $config;
$this->userId = $userId;
$this->appManager = $appManager;
}
/**
* Load the main calendar page
*
* @NoAdminRequired
* @NoCSRFRequired
*
* @return TemplateResponse
*/
public function index():TemplateResponse {
$defaultInitialView = $this->config->getAppValue($this->appName, 'currentView', 'dayGridMonth');
$defaultShowWeekends = $this->config->getAppValue($this->appName, 'showWeekends', 'yes');
$defaultWeekNumbers = $this->config->getAppValue($this->appName, 'showWeekNr', 'no');
$defaultSkipPopover = $this->config->getAppValue($this->appName, 'skipPopover', 'no');
$defaultTimezone = $this->config->getAppValue($this->appName, 'timezone', 'automatic');
return new TemplateResponse($this->appName, 'main', [
'app_version' => $this->config->getAppValue($this->appName, 'installed_version'),
'first_run' => $this->config->getUserValue($this->userId, $this->appName, 'firstRun', 'yes') === 'yes',
'initial_view' => $this->getView($this->config->getUserValue($this->userId, $this->appName, 'currentView', $defaultInitialView)),
'show_weekends' => $this->config->getUserValue($this->userId, $this->appName, 'showWeekends', $defaultShowWeekends) === 'yes',
'show_week_numbers' => $this->config->getUserValue($this->userId, $this->appName, 'showWeekNr', $defaultWeekNumbers) === 'yes',
'skip_popover' => $this->config->getUserValue($this->userId, $this->appName, 'skipPopover', $defaultSkipPopover) === 'yes',
'talk_enabled' => $this->appManager->isEnabledForUser('spreed'),
'timezone' => $this->config->getUserValue($this->userId, $this->appName, 'timezone', $defaultTimezone),
]);
}
/**
* Makes sure we don't use the old views anymore
*
* @param string $view
* @return string
*/
private function getView(string $view): string {
switch ($view) {
case 'agendaDay':
return 'timeGridDay';
case 'agendaWeek':
return 'timeGridWeek';
case 'month':
return 'dayGridMonth';
default:
return $view;
}
}
}