diff options
author | Christoph Wurst <ChristophWurst@users.noreply.github.com> | 2021-06-14 10:03:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-14 10:03:44 +0200 |
commit | dfbac05f7ba00c78ac15df61a425317a890b08d1 (patch) | |
tree | e1c230bc8709ccc70978c7e14214e40a3e4e202d /apps/dav/lib/Command | |
parent | 1979c657f9cdc8c7fc5ae54611a577d130feca6b (diff) | |
parent | 4850dae1df586d107c18f4f249dca445ad2798f3 (diff) | |
download | nextcloud-server-dfbac05f7ba00c78ac15df61a425317a890b08d1.tar.gz nextcloud-server-dfbac05f7ba00c78ac15df61a425317a890b08d1.zip |
Merge pull request #26421 from mattian/enh/25771/occ-delete-calendar
OCC command to delete calendars
Diffstat (limited to 'apps/dav/lib/Command')
-rw-r--r-- | apps/dav/lib/Command/DeleteCalendar.php | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/apps/dav/lib/Command/DeleteCalendar.php b/apps/dav/lib/Command/DeleteCalendar.php new file mode 100644 index 00000000000..42aa0e3278f --- /dev/null +++ b/apps/dav/lib/Command/DeleteCalendar.php @@ -0,0 +1,137 @@ +<?php + +declare(strict_types=1); +/** + * + * @copyright Copyright (c) 2021, Mattia Narducci (mattianarducci1@gmail.com) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + */ + +namespace OCA\DAV\Command; + +use OCA\DAV\CalDAV\BirthdayService; +use OCA\DAV\CalDAV\CalDavBackend; +use OCA\DAV\CalDAV\Calendar; +use OCP\IConfig; +use OCP\IL10N; +use OCP\IUserManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class DeleteCalendar extends Command { + /** @var CalDavBackend */ + private $calDav; + + /** @var IConfig */ + private $config; + + /** @var IL10N */ + private $l10n; + + /** @var IUserManager */ + private $userManager; + + /** + * @param CalDavBackend $calDav + * @param IConfig $config + * @param IL10N $l10n + * @param IUserManager $userManager + */ + public function __construct( + CalDavBackend $calDav, + IConfig $config, + IL10N $l10n, + IUserManager $userManager + ) { + parent::__construct(); + $this->calDav = $calDav; + $this->config = $config; + $this->l10n = $l10n; + $this->userManager = $userManager; + } + + protected function configure(): void { + $this + ->setName('dav:delete-calendar') + ->setDescription('Delete a dav calendar') + ->addArgument('uid', + InputArgument::REQUIRED, + 'User who owns the calendar') + ->addArgument('name', + InputArgument::OPTIONAL, + 'Name of the calendar to delete') + ->addOption('birthday', + null, + InputOption::VALUE_NONE, + 'Delete the birthday calendar') + ->addOption('force', + 'f', + InputOption::VALUE_NONE, + 'Force delete skipping trashbin'); + } + + protected function execute( + InputInterface $input, + OutputInterface $output + ): int { + /** @var string $user **/ + $user = $input->getArgument('uid'); + if (!$this->userManager->userExists($user)) { + throw new \InvalidArgumentException( + 'User <' . $user . '> is unknown.'); + } + + $birthday = $input->getOption('birthday'); + if ($birthday !== false) { + $name = BirthdayService::BIRTHDAY_CALENDAR_URI; + } else { + /** @var string $name **/ + $name = $input->getArgument('name'); + if (!$name) { + throw new \InvalidArgumentException( + 'Please specify a calendar name or --birthday'); + } + } + + $calendarInfo = $this->calDav->getCalendarByUri( + 'principals/users/' . $user, + $name); + if ($calendarInfo === null) { + throw new \InvalidArgumentException( + 'User <' . $user . '> has no calendar named <' . $name . '>. You can run occ dav:list-calendars to list calendars URIs for this user.'); + } + + $calendar = new Calendar( + $this->calDav, + $calendarInfo, + $this->l10n, + $this->config); + + $force = $input->getOption('force'); + if ($force) { + $calendar->disableTrashbin(); + } + + $calendar->delete(); + + return 0; + } +} |