Finalisation du module PurgeFakeCustomer
This commit is contained in:
19446
.idea/workspace.xml
generated
19446
.idea/workspace.xml
generated
File diff suppressed because it is too large
Load Diff
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user