CronOffreCommand.php 2.4 KB
Newer Older
1 2 3 4 5 6
<?php

namespace PotageBundle\Command;


use PotageBundle\Entity\Offre;
7
use PotageBundle\Services\LettreToken;
8 9 10 11 12 13
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CronOffreCommand extends ContainerAwareCommand
{
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
    
    private $lettreToken;
    
    /**
     * SendMailCommand constructor.
     *
     * @param LettreToken $lettreToken
     */
    public function __construct(LettreToken $lettreToken)
    {
        parent::__construct();
        $this->lettreToken = $lettreToken;
    }

    
29 30 31 32 33 34 35
    /**
     * {@inheritdoc}
     */
    protected function configure()
    {
        $this
            ->setName('potage:cron:offre')
36
            ->setDescription("Archive les offres qui sont expirées");
37 38 39 40
    }

    /**
     * Vérifie que les offres en cours n'ont pas expiré.
41 42
     * Si c'est le cas, le statut est changé, les tokens associés sont révoqués
     * et un mail est envoyé aux maraichers.
43 44 45 46 47 48 49 50
     *
     * @param InputInterface $input
     * @param OutputInterface $output
     * @return int|null|void
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        
51 52
        $em = $this->getContainer()->get('doctrine')
            ->getManager();
53
        
54 55
        $currentOffre = $em
            ->getRepository('PotageBundle:Offre')
56
            ->findAllByStatusForRead('current');
57 58 59 60 61 62 63 64
        
        $now = new \DateTime('now');
    
        /**
         * @var Offre $offre
         */
        foreach ($currentOffre as $offre)
        {
Mat's avatar
Mat committed
65 66
            if ($offre->getEndedAt() <= $now) {
              
67 68
                // change le statut de l'offre
                $offre->setStatus('closed');
69 70 71 72 73
                $output->write(
                    "\n"
                    . $offre->getReference()
                    . ": offre expired since "
                    . date_format($offre->getEndedAt(), "d/m/Y H:i")
74 75
                    . ", change status to archive..\n"
                );
76
                
77 78
                // révoque les tokens
                $ret = $this->lettreToken->revoquePotageUsersTokens($offre);
79
                $output->writeln($ret);
80
                
Mat's avatar
Mat committed
81
                // TODO envoyer un mail au gestionnaire pour notifier l'expiration de l'offre
82 83 84
            }
        }
        $em->flush();
85 86 87 88 89 90
        $output->write("\nDone\n");
    }
    
    
    
    
91
}