setName('dav:list-calendars') ->setDescription('List all calendars of a user') ->addArgument('uid', InputArgument::REQUIRED, 'User for whom all calendars will be listed'); } protected function execute(InputInterface $input, OutputInterface $output): int { $user = $input->getArgument('uid'); if (!$this->userManager->userExists($user)) { throw new \InvalidArgumentException("User <$user> is unknown."); } $calendars = $this->caldav->getCalendarsForUser("principals/users/$user"); $calendarTableData = []; foreach ($calendars as $calendar) { // skip birthday calendar if ($calendar['uri'] === BirthdayService::BIRTHDAY_CALENDAR_URI) { continue; } $readOnly = false; $readOnlyIndex = '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only'; if (isset($calendar[$readOnlyIndex])) { $readOnly = $calendar[$readOnlyIndex]; } $calendarTableData[] = [ $calendar['uri'], $calendar['{DAV:}displayname'], $calendar['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'], $calendar['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_NEXTCLOUD . '}owner-displayname'], $readOnly ? ' x ' : ' ✓ ', ]; } if (count($calendarTableData) > 0) { $table = new Table($output); $table->setHeaders(['URI', 'Displayname', 'Owner principal', 'Owner displayname', 'Writable']) ->setRows($calendarTableData); $table->render(); } else { $output->writeln("User <$user> has no calendars"); } return self::SUCCESS; } }