setName('dav:create-subscription') ->setDescription('Create a dav subscription') ->addArgument('user', InputArgument::REQUIRED, 'User for whom the subscription will be created') ->addArgument('name', InputArgument::REQUIRED, 'Name of the subscription to create') ->addArgument('url', InputArgument::REQUIRED, 'Source url of the subscription to create') ->addArgument('color', InputArgument::OPTIONAL, 'Hex color code for the calendar color'); } protected function execute(InputInterface $input, OutputInterface $output): int { $user = $input->getArgument('user'); if (!$this->userManager->userExists($user)) { $output->writeln("User <$user> in unknown."); return self::FAILURE; } $name = $input->getArgument('name'); $url = $input->getArgument('url'); $color = $input->getArgument('color') ?? $this->themingDefaults->getColorPrimary(); $subscriptions = $this->caldav->getSubscriptionsForUser("principals/users/$user"); $exists = array_filter($subscriptions, function ($row) use ($url) { return $row['source'] === $url; }); if (!empty($exists)) { $output->writeln("Subscription for url <$url> already exists for this user."); return self::FAILURE; } $urlProperty = new Href($url); $properties = ['{http://owncloud.org/ns}calendar-enabled' => 1, '{DAV:}displayname' => $name, '{http://apple.com/ns/ical/}calendar-color' => $color, '{http://calendarserver.org/ns/}source' => $urlProperty, ]; $this->caldav->createSubscription("principals/users/$user", $name, $properties); return self::SUCCESS; } }