Finalisation du module PurgeFakeCustomer

This commit is contained in:
2021-01-13 17:11:31 +01:00
parent 4845682d59
commit b704cbdaf6
5 changed files with 1406 additions and 18121 deletions

19446
.idea/workspace.xml generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,14 @@ use Thelia\Model\ConfigQuery;
class FakeCustomerPurge extends ContainerAwareCommand class FakeCustomerPurge extends ContainerAwareCommand
{ {
protected function configure()
{
$this
->setName("fakecustomers:purge")
->setDescription("Purge all fake customers")
;
}
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$output->writeln( $output->writeln(
@@ -29,6 +37,6 @@ class FakeCustomerPurge extends ContainerAwareCommand
$output->writeln("<$level>$status</$level>"); $output->writeln("<$level>$status</$level>");
} }
$output->writeln(sprintf("<info>%d fake customers deleteddàçp</info>", $event->getDeletedCount())); $output->writeln(sprintf("<info>%d fake customers deleted (Ids : %s)</info>", $event->getDeletedCount(), $event->getDeletedList()));
} }
} }

View File

@@ -33,7 +33,7 @@ class PurgeController extends BaseFrontController
$responseText .= strtoupper($level) . ": $status<br>"; $responseText .= strtoupper($level) . ": $status<br>";
} }
$responseText .= sprintf("INFO: %d fake customers deleted<br>", $event->getDeletedCount()); $responseText .= sprintf("INFO: %d fake customers deleted (Ids : %s)<br>", $event->getDeletedCount(), $event->getDeletedList());
} }
return new Response($responseText); return new Response($responseText);

View File

@@ -20,6 +20,9 @@ class FakeCustomerEvent extends ActionEvent
/** @var int */ /** @var int */
protected $deletedCount = 0; protected $deletedCount = 0;
/** @var string */
protected $deletedList = '';
/** /**
* FakeCustomerEvent constructor. * FakeCustomerEvent constructor.
*/ */
@@ -80,4 +83,22 @@ class FakeCustomerEvent extends ActionEvent
$this->deletedCount = $deletedCount; $this->deletedCount = $deletedCount;
return $this; return $this;
} }
/**
* @return string
*/
public function getDeletedList()
{
return $this->deletedList;
}
/**
* @param string $deletedList
* @return $this
*/
public function setDeletedList($deletedList)
{
$this->deletedList = $deletedList;
return $this;
}
} }

View File

@@ -12,24 +12,24 @@ use PurgeFakeCustomer\Event\FakeCustomerEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Model\CustomerQuery; use Thelia\Model\CustomerQuery;
use Thelia\Model\Map\FeatureTableMap; use Thelia\Model\Map\FeatureTableMap;
use Thelia\Model\Map\TemplateTableMap;
use Thelia\Model\Template as ChildTemplate;
class EventManager implements EventSubscriberInterface class EventManager implements EventSubscriberInterface
{ {
public function purge(FakeCustomerEvent $event) public function purge(FakeCustomerEvent $event)
{ {
$con = Propel::getServiceContainer()->getReadConnection(FeatureTableMap::DATABASE_NAME);
$critereComplet = ''; $critereComplet = '';
$critere = $event->getCritere(); $critere = $event->getCritere();
if ($critere !== '') $critereComplet = $critere . ' AND '; if ($critere !== '') $critereComplet = $critere . ' AND ';
$critereComplet = $critereComplet . '`customer_id` NOT IN (SELECT DISTINCT(`customer_id`) FROM `order`)';
$verbose = $event->isVerbose(); /* On ne supprime que les faux clients n'ayant pas passé de commande. */
$deleted = 0; $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; $sql = 'SELECT `customer_id` FROM `address` WHERE ' . $critereComplet;
$con = Propel::getServiceContainer()->getReadConnection(FeatureTableMap::DATABASE_NAME);
try { try {
$stmt = $con->prepare($sql); $stmt = $con->prepare($sql);
$stmt->execute(); $stmt->execute();
@@ -37,17 +37,37 @@ class EventManager implements EventSubscriberInterface
Propel::log($e->getMessage(), Propel::LOG_ERR); Propel::log($e->getMessage(), Propel::LOG_ERR);
throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e); throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e);
} }
$obj = null;
if ($rows = $stmt->fetchAll(\PDO::FETCH_NUM)) { if ($rows = $stmt->fetchAll(\PDO::FETCH_NUM))
$obj = new ChildTemplate(); {
$obj->hydrate($row); $stmt->closeCursor();
TemplateTableMap::addInstanceToPool($obj, (string) $key); $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(); $stmt->closeCursor();
$event->setDeletedList(substr($listeId, 1, -1));
return $obj;
$event->setDeletedCount($deleted); $event->setDeletedCount($deleted);
return ($toBeDeleted === $deleted);
} }
/** /**