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
{
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</$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 .= 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);

View File

@@ -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;
}
}

View File

@@ -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);
}
/**