diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 46c2f2f14..4525550e0 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,18092 +1,1255 @@ + + + \ No newline at end of file diff --git a/local/modules/PurgeFakeCustomer/Command/FakeCustomerPurge.php b/local/modules/PurgeFakeCustomer/Command/FakeCustomerPurge.php index 853c930b8..b77dc36e1 100644 --- a/local/modules/PurgeFakeCustomer/Command/FakeCustomerPurge.php +++ b/local/modules/PurgeFakeCustomer/Command/FakeCustomerPurge.php @@ -14,6 +14,14 @@ use Thelia\Model\ConfigQuery; class FakeCustomerPurge extends ContainerAwareCommand { + protected function configure() + { + $this + ->setName("fakecustomers:purge") + ->setDescription("Purge all fake customers") + ; + } + protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln( @@ -29,6 +37,6 @@ class FakeCustomerPurge extends ContainerAwareCommand $output->writeln("<$level>$status"); } - $output->writeln(sprintf("%d fake customers deleteddàçp", $event->getDeletedCount())); + $output->writeln(sprintf("%d fake customers deleted (Ids : %s)", $event->getDeletedCount(), $event->getDeletedList())); } } diff --git a/local/modules/PurgeFakeCustomer/Controller/PurgeController.php b/local/modules/PurgeFakeCustomer/Controller/PurgeController.php index 0b04e4e4a..6f60a998a 100644 --- a/local/modules/PurgeFakeCustomer/Controller/PurgeController.php +++ b/local/modules/PurgeFakeCustomer/Controller/PurgeController.php @@ -33,7 +33,7 @@ class PurgeController extends BaseFrontController $responseText .= strtoupper($level) . ": $status
"; } - $responseText .= sprintf("INFO: %d fake customers deleted
", $event->getDeletedCount()); + $responseText .= sprintf("INFO: %d fake customers deleted (Ids : %s)
", $event->getDeletedCount(), $event->getDeletedList()); } return new Response($responseText); diff --git a/local/modules/PurgeFakeCustomer/Event/FakeCustomerEvent.php b/local/modules/PurgeFakeCustomer/Event/FakeCustomerEvent.php index b7273b737..e1a155d83 100644 --- a/local/modules/PurgeFakeCustomer/Event/FakeCustomerEvent.php +++ b/local/modules/PurgeFakeCustomer/Event/FakeCustomerEvent.php @@ -20,6 +20,9 @@ class FakeCustomerEvent extends ActionEvent /** @var int */ protected $deletedCount = 0; + /** @var string */ + protected $deletedList = ''; + /** * FakeCustomerEvent constructor. */ @@ -80,4 +83,22 @@ class FakeCustomerEvent extends ActionEvent $this->deletedCount = $deletedCount; return $this; } + + /** + * @return string + */ + public function getDeletedList() + { + return $this->deletedList; + } + /** + * @param string $deletedList + * @return $this + */ + public function setDeletedList($deletedList) + { + $this->deletedList = $deletedList; + return $this; + } + } diff --git a/local/modules/PurgeFakeCustomer/EventListener/EventManager.php b/local/modules/PurgeFakeCustomer/EventListener/EventManager.php index 3b7aaaf43..f6704776c 100644 --- a/local/modules/PurgeFakeCustomer/EventListener/EventManager.php +++ b/local/modules/PurgeFakeCustomer/EventListener/EventManager.php @@ -12,24 +12,24 @@ use PurgeFakeCustomer\Event\FakeCustomerEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Thelia\Model\CustomerQuery; use Thelia\Model\Map\FeatureTableMap; -use Thelia\Model\Map\TemplateTableMap; -use Thelia\Model\Template as ChildTemplate; class EventManager implements EventSubscriberInterface { public function purge(FakeCustomerEvent $event) { + $con = Propel::getServiceContainer()->getReadConnection(FeatureTableMap::DATABASE_NAME); $critereComplet = ''; $critere = $event->getCritere(); if ($critere !== '') $critereComplet = $critere . ' AND '; - $critereComplet = $critereComplet . '`customer_id` NOT IN (SELECT DISTINCT(`customer_id`) FROM `order`)'; - $verbose = $event->isVerbose(); - $deleted = 0; + /* On ne supprime que les faux clients n'ayant pas passé de commande. */ + $critereComplet .= '`customer_id` NOT IN (SELECT DISTINCT(`customer_id`) FROM `order`)'; + + $toBeDeleted = $deleted = $nbAvant = $nbApres = 0; + $listeId = ''; $sql = 'SELECT `customer_id` FROM `address` WHERE ' . $critereComplet; - $con = Propel::getServiceContainer()->getReadConnection(FeatureTableMap::DATABASE_NAME); try { $stmt = $con->prepare($sql); $stmt->execute(); @@ -37,17 +37,37 @@ class EventManager implements EventSubscriberInterface Propel::log($e->getMessage(), Propel::LOG_ERR); throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e); } - $obj = null; - if ($rows = $stmt->fetchAll(\PDO::FETCH_NUM)) { - $obj = new ChildTemplate(); - $obj->hydrate($row); - TemplateTableMap::addInstanceToPool($obj, (string) $key); + + if ($rows = $stmt->fetchAll(\PDO::FETCH_NUM)) + { + $stmt->closeCursor(); + $toBeDeleted = count($rows); + + $listeId = '('; + foreach ($rows as $id) { + $listeId .= $id[0] . ','; + } + $listeId = substr($listeId, 0, -1) . ')'; + $event->setDeletedList(substr($listeId, 1, -1)); + + $nbAvant = CustomerQuery::create()->count(); + /* Le OnCascade permet de supprimer toutes les infos du client juste en le supprimant dans la table CUSTOMER */ + $sql = 'DELETE FROM `customer` WHERE `id` IN ' . $listeId; + try { + $stmt = $con->prepare($sql); + $stmt->execute(); + } catch (Exception $e) { + Propel::log($e->getMessage(), Propel::LOG_ERR); + throw new PropelException(sprintf('Unable to execute DELETE statement [%s]', $sql), 0, $e); + } + $nbApres = CustomerQuery::create()->count(); + $deleted = $nbAvant - $nbApres; } $stmt->closeCursor(); - - return $obj; - + $event->setDeletedList(substr($listeId, 1, -1)); $event->setDeletedCount($deleted); + + return ($toBeDeleted === $deleted); } /**