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
|
||||
{
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user