From 692d12d553b72c5b9e5192a788a95f30dd02da36 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 19 Sep 2016 12:29:32 +0200 Subject: [PATCH] add workaround to fix webcal creation under Nextcloud9 --- controller/viewcontroller.php | 9 ++++++--- js/app/service/calendarservice.js | 15 ++++++++++++++- templates/part.fullcalendar.php | 1 + tests/unit/controller/viewcontrollerTest.php | 11 ++++++----- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/controller/viewcontroller.php b/controller/viewcontroller.php index 019c5e6217..c101af5848 100644 --- a/controller/viewcontroller.php +++ b/controller/viewcontroller.php @@ -65,10 +65,10 @@ public function __construct($appName, IRequest $request, */ public function index() { $runningOn = $this->config->getSystemValue('version'); - $runningOnServer91OrLater = version_compare($runningOn, '9.1', '>='); + $runningOnNextcloud10OrLater = version_compare($runningOn, '9.1', '>='); - $supportsClass = $runningOnServer91OrLater; - $assetPipelineBroken = !$runningOnServer91OrLater; + $supportsClass = $runningOnNextcloud10OrLater; + $assetPipelineBroken = !$runningOnNextcloud10OrLater; $isAssetPipelineEnabled = $this->config->getSystemValue('asset-pipeline.enabled', false); if ($isAssetPipelineEnabled && $assetPipelineBroken) { @@ -84,6 +84,8 @@ public function index() { $skipPopover = $this->config->getUserValue($userId, $this->appName, 'skipPopover', 'no'); $weekNumbers = $this->config->getUserValue($userId, $this->appName, 'showWeekNr', 'no'); $defaultColor = $this->config->getAppValue('theming', 'color', '#0082C9'); + + $webCalWorkaround = $runningOnNextcloud10OrLater ? 'no' : 'yes'; return new TemplateResponse('calendar', 'main', [ 'appVersion' => $appVersion, @@ -93,6 +95,7 @@ public function index() { 'weekNumbers' => $weekNumbers, 'supportsClass' => $supportsClass, 'defaultColor' => $defaultColor, + 'webCalWorkaround' => $webCalWorkaround, ]); } diff --git a/js/app/service/calendarservice.js b/js/app/service/calendarservice.js index 79b817c528..89023a88e0 100644 --- a/js/app/service/calendarservice.js +++ b/js/app/service/calendarservice.js @@ -245,6 +245,8 @@ app.service('CalendarService', function(DavClient, StringUtility, XMLUtility, Ca }); } + const needsWorkaround = angular.element('#fullcalendar').attr('data-webCalWorkaround') === 'yes'; + const [skeleton, dPropChildren] = XMLUtility.getRootSkeleton('d:mkcol', 'd:set', 'd:prop'); dPropChildren.push({ name: 'd:resourcetype', @@ -285,7 +287,18 @@ app.service('CalendarService', function(DavClient, StringUtility, XMLUtility, Ca return DavClient.request('MKCOL', url, headers, xml).then(function(response) { if (response.status === 201) { self._takenUrls.push(url); - return self.get(url); + + return self.get(url).then(function(webcal) { + if (needsWorkaround) { + webcal.enabled = true; + webcal.displayname = name; + webcal.color = color; + + return self.update(webcal); + } else { + return webcal; + } + }); } }); }; diff --git a/templates/part.fullcalendar.php b/templates/part.fullcalendar.php index 6815def671..d6a3cf963d 100644 --- a/templates/part.fullcalendar.php +++ b/templates/part.fullcalendar.php @@ -30,6 +30,7 @@ class="calendar" data-emailAddress="" data-skipPopover="" data-weekNumbers="" + data-webCalWorkaround="" fc id="fullcalendar"> diff --git a/tests/unit/controller/viewcontrollerTest.php b/tests/unit/controller/viewcontrollerTest.php index a4e6eee052..dd4fdad84b 100755 --- a/tests/unit/controller/viewcontrollerTest.php +++ b/tests/unit/controller/viewcontrollerTest.php @@ -86,7 +86,7 @@ public function setUp() { /** * @dataProvider indexDataProvider */ - public function testIndex($isAssetPipelineEnabled, $showAssetPipelineError, $serverVersion, $expectsSupportsClass) { + public function testIndex($isAssetPipelineEnabled, $showAssetPipelineError, $serverVersion, $expectsSupportsClass, $expectsWebcalWorkaround) { $this->config->expects($this->at(0)) ->method('getSystemValue') ->with('version') @@ -152,6 +152,7 @@ public function testIndex($isAssetPipelineEnabled, $showAssetPipelineError, $ser 'weekNumbers' => 'someShowWeekNrValue', 'supportsClass' => $expectsSupportsClass, 'defaultColor' => '#ff00ff', + 'webCalWorkaround' => $expectsWebcalWorkaround ], $actual->getParams()); $this->assertEquals('main', $actual->getTemplateName()); } @@ -160,10 +161,10 @@ public function testIndex($isAssetPipelineEnabled, $showAssetPipelineError, $ser public function indexDataProvider() { return [ - [true, true, '9.0.5.2', false], - [true, false, '9.1.0.0', true], - [false, false, '9.0.5.2', false], - [false, false, '9.1.0.0', true] + [true, true, '9.0.5.2', false, 'yes'], + [true, false, '9.1.0.0', true, 'no'], + [false, false, '9.0.5.2', false, 'yes'], + [false, false, '9.1.0.0', true, 'no'] ]; }