-
Notifications
You must be signed in to change notification settings - Fork 241
Commit
The old, bundled widget has to stay until we exclusively support the corresponding server versions. Signed-off-by: Richard Steinmetz <[email protected]>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
* Calendar App | ||
* | ||
* @author Georg Ehrke | ||
* @author Richard Steinmetz <[email protected]> | ||
* @copyright 2019 Georg Ehrke <[email protected]> | ||
* | ||
* This library is free software; you can redistribute it and/or | ||
|
@@ -24,6 +25,7 @@ | |
namespace OCA\Calendar\AppInfo; | ||
|
||
use OCA\Calendar\Dashboard\CalendarWidget; | ||
use OCA\Calendar\Dashboard\CalendarWidgetV2; | ||
use OCA\Calendar\Events\BeforeAppointmentBookedEvent; | ||
use OCA\Calendar\Listener\AppointmentBookedListener; | ||
use OCA\Calendar\Listener\UserDeletedListener; | ||
|
@@ -33,6 +35,7 @@ | |
use OCP\AppFramework\Bootstrap\IBootContext; | ||
use OCP\AppFramework\Bootstrap\IBootstrap; | ||
use OCP\AppFramework\Bootstrap\IRegistrationContext; | ||
use OCP\Dashboard\IAPIWidgetV2; | ||
use OCP\User\Events\UserDeletedEvent; | ||
use function method_exists; | ||
|
||
|
@@ -51,7 +54,12 @@ public function __construct(array $params = []) { | |
* @inheritDoc | ||
*/ | ||
public function register(IRegistrationContext $context): void { | ||
$context->registerDashboardWidget(CalendarWidget::class); | ||
// TODO: drop conditional code when the app is 27.1+ | ||
if (interface_exists(IAPIWidgetV2::class)) { | ||
Check failure on line 58 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-masterUndefinedClass
Check failure on line 58 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable27UndefinedClass
Check failure on line 58 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable26UndefinedClass
Check failure on line 58 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable25UndefinedClass
|
||
$context->registerDashboardWidget(CalendarWidgetV2::class); | ||
Check failure on line 59 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-masterMissingDependency
Check failure on line 59 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable27MissingDependency
Check failure on line 59 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable26MissingDependency
Check failure on line 59 in lib/AppInfo/Application.php GitHub Actions / Nextcloud dev-stable25MissingDependency
|
||
} else { | ||
$context->registerDashboardWidget(CalendarWidget::class); | ||
} | ||
|
||
// TODO: drop conditional code when the app is 23+ | ||
if (method_exists($context, 'registerProfileLinkAction')) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
* Calendar App | ||
* | ||
* @author Georg Ehrke | ||
* @author Richard Steinmetz <[email protected]> | ||
* @copyright 2019 Georg Ehrke <[email protected]> | ||
* @copyright Copyright (c) 2022 Informatyka Boguslawski sp. z o.o. sp.k., http://www.ib.pl/ | ||
* | ||
|
@@ -201,6 +202,8 @@ public function getCalendarDotSvg(string $color = "#0082c9"): FileDisplayRespons | |
} | ||
$file = $folder->newFile($color . '.svg', $svg); | ||
$response = new FileDisplayResponse($file); | ||
// Some browsers won't render SVGs without content types (for security reasons) | ||
$response->addHeader('Content-Type', 'image/svg+xml'); | ||
$response->cacheFor(24 * 3600); // 1 day | ||
return $response; | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
* @copyright Copyright (c) 2020 Julius Härtl <[email protected]> | ||
* | ||
* @author Julius Härtl <[email protected]> | ||
* @author Richard Steinmetz <[email protected]> | ||
* | ||
* @license GNU AGPL version 3 or any later version | ||
* | ||
|
@@ -46,13 +47,13 @@ | |
use OCP\Util; | ||
|
||
class CalendarWidget implements IAPIWidget, IButtonWidget, IIconWidget, IOptionWidget { | ||
private IL10N $l10n; | ||
private IInitialState $initialStateService; | ||
private JSDataService $dataService; | ||
private IDateTimeFormatter $dateTimeFormatter; | ||
private IURLGenerator $urlGenerator; | ||
private IManager $calendarManager; | ||
private ITimeFactory $timeFactory; | ||
protected IL10N $l10n; | ||
protected IInitialState $initialStateService; | ||
protected JSDataService $dataService; | ||
protected IDateTimeFormatter $dateTimeFormatter; | ||
protected IURLGenerator $urlGenerator; | ||
protected IManager $calendarManager; | ||
protected ITimeFactory $timeFactory; | ||
|
||
/** | ||
* CalendarWidget constructor. | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
/** | ||
* @copyright Copyright (c) 2023 Richard Steinmetz <[email protected]> | ||
* | ||
* @author Richard Steinmetz <[email protected]> | ||
* | ||
* @license AGPL-3.0-or-later | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program 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 General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
|
||
namespace OCA\Calendar\Dashboard; | ||
|
||
use OCP\Dashboard\IAPIWidgetV2; | ||
use OCP\Dashboard\IReloadableWidget; | ||
use OCP\Dashboard\Model\WidgetItems; | ||
|
||
/** | ||
* Requires Nextcloud >= 27.1.0 | ||
*/ | ||
class CalendarWidgetV2 extends CalendarWidget implements IAPIWidgetV2, IReloadableWidget { | ||
Check failure on line 36 in lib/Dashboard/CalendarWidgetV2.php GitHub Actions / Nextcloud dev-masterUndefinedClass
Check failure on line 36 in lib/Dashboard/CalendarWidgetV2.php GitHub Actions / Nextcloud dev-stable27UndefinedClass
Check failure on line 36 in lib/Dashboard/CalendarWidgetV2.php GitHub Actions / Nextcloud dev-stable26UndefinedClass
Check failure on line 36 in lib/Dashboard/CalendarWidgetV2.php GitHub Actions / Nextcloud dev-stable25UndefinedClass
|
||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getItemsV2(string $userId, ?string $since = null, int $limit = 7): WidgetItems { | ||
$widgetItems = $this->getItems($userId, $since, $limit); | ||
|
||
$halfEmptyContentMessage = ''; | ||
if (!empty($widgetItems)) { | ||
$startOfTomorrow = $this->timeFactory->getDateTime('tomorrow')->getTimestamp(); | ||
foreach ($widgetItems as $item) { | ||
if ((int)$item->getSinceId() >= $startOfTomorrow) { | ||
$halfEmptyContentMessage = $this->l10n->t('No more events today'); | ||
} | ||
} | ||
} | ||
|
||
return new WidgetItems( | ||
$widgetItems, | ||
empty($widgetItems) ? $this->l10n->t('No upcoming events') : '', | ||
$halfEmptyContentMessage, | ||
); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getReloadInterval(): int { | ||
return 60; | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function load(): void { | ||
// No assets need to be loaded anymore as the widget is rendered from the API | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getIconClass(): string { | ||
return 'icon-calendar-dark'; | ||
} | ||
} |