diff --git a/apps/dav/lib/Command/SyncBirthdayCalendar.php b/apps/dav/lib/Command/SyncBirthdayCalendar.php index a99e2ea4b8..88f85a9881 100644 --- a/apps/dav/lib/Command/SyncBirthdayCalendar.php +++ b/apps/dav/lib/Command/SyncBirthdayCalendar.php @@ -23,6 +23,7 @@ namespace OCA\DAV\Command; use OCA\DAV\CalDAV\BirthdayService; +use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; use Symfony\Component\Console\Command\Command; @@ -36,16 +37,22 @@ class SyncBirthdayCalendar extends Command { /** @var BirthdayService */ private $birthdayService; + /** @var IConfig */ + private $config; + /** @var IUserManager */ private $userManager; /** * @param IUserManager $userManager + * @param IConfig $config * @param BirthdayService $birthdayService */ - function __construct(IUserManager $userManager, BirthdayService $birthdayService) { + function __construct(IUserManager $userManager, IConfig $config, + BirthdayService $birthdayService) { parent::__construct(); $this->birthdayService = $birthdayService; + $this->config = $config; $this->userManager = $userManager; } @@ -63,11 +70,21 @@ class SyncBirthdayCalendar extends Command { * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { + $this->verifyEnabled(); + $user = $input->getArgument('user'); if (!is_null($user)) { if (!$this->userManager->userExists($user)) { throw new \InvalidArgumentException("User <$user> in unknown."); } + + // re-enable the birthday calendar in case it's called directly with a user name + $isEnabled = $this->config->getUserValue($user, 'dav', 'generateBirthdayCalendar', 'yes'); + if ($isEnabled !== 'yes') { + $this->config->setUserValue($user, 'dav', 'generateBirthdayCalendar', 'yes'); + $output->writeln("Re-enabling birthday calendar for $user"); + } + $output->writeln("Start birthday calendar sync for $user"); $this->birthdayService->syncUser($user); return; @@ -77,6 +94,13 @@ class SyncBirthdayCalendar extends Command { $p->start(); $this->userManager->callForAllUsers(function($user) use ($p) { $p->advance(); + + $userId = $user->getUID(); + $isEnabled = $this->config->getUserValue($userId, 'dav', 'generateBirthdayCalendar', 'yes'); + if ($isEnabled !== 'yes') { + return; + } + /** @var IUser $user */ $this->birthdayService->syncUser($user->getUID()); }); @@ -84,4 +108,12 @@ class SyncBirthdayCalendar extends Command { $p->finish(); $output->writeln(''); } + + protected function verifyEnabled () { + $isEnabled = $this->config->getAppValue('dav', 'generateBirthdayCalendar', 'yes'); + + if ($isEnabled !== 'yes') { + throw new \InvalidArgumentException('Birthday calendars are disabled'); + } + } }