. * */ 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 Psr\Log\LoggerInterface; 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; /** @var LoggerInterface */ private $logger; /** * @param CalDavBackend $calDav * @param IConfig $config * @param IL10N $l10n * @param IUserManager $userManager */ public function __construct( CalDavBackend $calDav, IConfig $config, IL10N $l10n, IUserManager $userManager, LoggerInterface $logger ) { parent::__construct(); $this->calDav = $calDav; $this->config = $config; $this->l10n = $l10n; $this->userManager = $userManager; $this->logger = $logger; } 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, $this->logger ); $force = $input->getOption('force'); if ($force) { $calendar->disableTrashbin(); } $calendar->delete(); return 0; } }