X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/278a472cf91b7936dca2ea7629a931be4ff74740..5ec45cd7fa8b353f4f211c0abfcc0c875a938c7e:/Command/Calendar2Command.php diff --git a/Command/Calendar2Command.php b/Command/Calendar2Command.php deleted file mode 100644 index 257d2e3..0000000 --- a/Command/Calendar2Command.php +++ /dev/null @@ -1,203 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Rapsys\AirBundle\Command; - -use Doctrine\Persistence\ManagerRegistry; - -use Google\Client; -use Google\Service\Calendar; -use Google\Service\Oauth2; - -use Symfony\Component\Cache\Adapter\FilesystemAdapter; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Routing\Generator\UrlGeneratorInterface; -use Symfony\Component\Routing\RouterInterface; -use Symfony\Contracts\Translation\TranslatorInterface; - -use Twig\Extra\Markdown\DefaultMarkdown; - -use Rapsys\AirBundle\Command; -use Rapsys\AirBundle\Entity\GoogleCalendar; -use Rapsys\AirBundle\Entity\GoogleToken; -use Rapsys\AirBundle\Entity\Session; - -use Rapsys\PackBundle\Util\SluggerUtil; - -/** - * {@inheritdoc} - * - * Synchronize sessions in users' calendar - */ -class Calendar2Command extends Command { - /** - * Set description - * - * Shown with bin/console list - */ - protected string $description = 'Synchronize sessions in users\' calendar'; - - /** - * Set help - * - * Shown with bin/console --help rapsysair:calendar2 - */ - protected string $help = 'This command synchronize sessions in users\' google calendar'; - - /** - * Set markdown instance - */ - #private DefaultMarkdown $markdown; - - /** - * Set date period instance - */ - #private \DatePeriod $period; - - /** - * {@inheritdoc} - */ - public function __construct(protected ManagerRegistry $doctrine, protected string $locale, protected RouterInterface $router, protected SluggerUtil $slugger, protected TranslatorInterface $translator, protected Client $google, protected DefaultMarkdown $markdown) { - //Call parent constructor - parent::__construct($this->doctrine, $this->locale, $this->router, $this->slugger, $this->translator); - - //Replace google client redirect uri - $this->google->setRedirectUri($this->router->generate($this->google->getRedirectUri(), [], UrlGeneratorInterface::ABSOLUTE_URL)); - - /* - //Set google client - $this->client = new Client( - [ - 'application_name' => $_ENV['RAPSYSAIR_GOOGLE_PROJECT'], - 'client_id' => $_ENV['GOOGLE_CLIENT_ID'], - 'client_secret' => $_ENV['GOOGLE_CLIENT_SECRET'], - 'redirect_uri' => $this->router->generate('rapsysair_google_callback', [], UrlGeneratorInterface::ABSOLUTE_URL), - 'scopes' => $this->scopes, - 'access_type' => 'offline', - #'login_hint' => $user->getMail(), - //XXX: see https://stackoverflow.com/questions/10827920/not-receiving-google-oauth-refresh-token - #'approval_prompt' => 'force' - 'prompt' => 'consent' - ] - ); - - //Set Markdown instance - $this->markdown = new DefaultMarkdown;*/ - } - - /** - * Configure attribute command - */ - /*protected function configure() { - //Configure the class - $this - //Set name - ->setName('rapsysair:calendar2') - //Set description shown with bin/console list - ->setDescription('Synchronize sessions in users\' calendar') - //Set description shown with bin/console --help airlibre:attribute - ->setHelp('This command synchronize sessions in users\' google calendar'); - }*/ - - /** - * Process the attribution - */ - protected function execute(InputInterface $input, OutputInterface $output): int { - //Set period - $period = new \DatePeriod( - //Start from last week - new \DateTime('-1 week'), - //Iterate on each day - new \DateInterval('P1D'), - //End with next 2 week - new \DateTime('+2 week') - ); - - //Iterate on google tokens - foreach($tokens = $this->doctrine->getRepository(GoogleToken::class)->findAllIndexed() as $tid => $token) { - //Iterate on google calendars - foreach($calendars = $token['calendars'] as $cid => $calendar) { - #$calendar['synchronized'] - var_dump($token); - - //TODO: see if we may be smarter here ? - - //TODO: load all calendar events here ? - - //Iterate on sessions to update - foreach($sessions = $this->doctrine->getRepository(Session::class)->findAllByUserIdSynchronized($token['uid'], $calendar['synchronized']) as $session) { - //TODO: insert/update/delete events here ? - } - - //TODO: delete remaining events here ? - } - } - - //TODO: get user filter ? (users_subscriptions+users_dances) - - //TODO: XXX: or fetch directly the events updated since synchronized + matching rubscriptions and/or dances - - #var_dump($tokens); - exit; - - //Set sql request - $sql =<<doctrine->getRepository(Session::class)->findAllByDanceUserModified($filter['dance'], $filter['user'], $calendar['synchronized']); - //Iterate on google tokens - foreach($tokens as $token) { - //TODO: clear google client cache - //TODO: set google token - //Iterate on google calendars - foreach($calendars as $calendar) { - //Fetch sessions to sync - $sessions = $this->doctrine->getRepository(Session::class)->findAllByDanceUserModified($filter['dance'], $filter['user'], $calendar['synchronized']); - } - } - - //Return success - return self::SUCCESS; - } -}