Skip to content

Instantly share code, notes, and snippets.

@uneak
Created December 14, 2017 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uneak/110ce1ac1c066e5f5817f6a1a6df8c91 to your computer and use it in GitHub Desktop.
Save uneak/110ce1ac1c066e5f5817f6a1a6df8c91 to your computer and use it in GitHub Desktop.
<?php
namespace Uneak\ProspectBundle\Command;
use libphonenumber\NumberParseException;
use libphonenumber\PhoneNumber;
use libphonenumber\PhoneNumberFormat;
use libphonenumber\PhoneNumberUtil;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Uneak\FieldDataBundle\FieldData\FieldDataHelper;
use Uneak\FieldTypeBundle\Field\DataTransformer\StringToBooleanTransformer;
use Uneak\FieldTypeBundle\Field\DataTransformer\StringToGenderTransformer;
use Uneak\FieldTypeBundle\Field\PhoneNumberHelper;
class MigrationCommand extends ContainerAwareCommand {
protected function configure() {
$this
->setName('database:migration')
->setDescription('Migration');
}
protected function execute(InputInterface $input, OutputInterface $output) {
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
$migrationTypes = array(
FieldDataHelper::ALIAS_BIRTHDAY,
FieldDataHelper::ALIAS_GENDER,
FieldDataHelper::ALIAS_FIRSTNAME,
FieldDataHelper::ALIAS_LASTNAME,
FieldDataHelper::ALIAS_OPTIN,
FieldDataHelper::ALIAS_PHONE,
FieldDataHelper::ALIAS_EMAIL,
);
foreach ($migrationTypes as $migrationType) {
$output->write(" --- ANALYSE DES FIELDS : $migrationType ---",true);
$fields = $em->getRepository('UneakFieldBundle:Field')->findBy(array('type' => $migrationType));
/** @var $field \Uneak\FieldBundle\Entity\Field */
foreach ($fields as $field) {
$fieldDatas = $field->getFieldDatas();
/** @var $fieldData \Uneak\FieldDataBundle\Entity\FieldData */
foreach ($fieldDatas as $fieldData) {
$type = $field->getType();
$prospect = $fieldData->getProspect();
$value = $fieldData->getValue();
$group = $fieldData->getField()->getGroup();
$output->write("/ $value /",true);
$prospect->setGroup($group);
switch ($type) {
case FieldDataHelper::ALIAS_BIRTHDAY:
$date = \DateTime::createFromFormat('Y-m-d h:i:s', $value);
$prospect->setBirthday($date ? $date : null);
break;
case FieldDataHelper::ALIAS_GENDER:
$gender = null;
try {
$gender = StringToGenderTransformer::getString($value);
} catch (\Exception $e) {
}
$prospect->setGender($gender);
break;
case FieldDataHelper::ALIAS_FIRSTNAME:
$prospect->setFirstname($value);
break;
case FieldDataHelper::ALIAS_LASTNAME:
$prospect->setLastname($value);
break;
case FieldDataHelper::ALIAS_OPTIN:
$bool = null;
try {
$boolString = StringToBooleanTransformer::getBoolean($value);
if ($boolString == '1') {
$bool = 1;
}
if ($boolString == '0') {
$bool = 0;
}
} catch (\Exception $e) {
}
$prospect->setOptin($bool);
break;
case FieldDataHelper::ALIAS_PHONE:
$re = '/^\d*[.|,]\d*[E|e][\+|\-]\d+/';
if (preg_match($re, $value, $matches)) {
$value = str_replace(",", ".", $value);
$value = (float)$value;
}
$value = preg_replace('/[^+0-9]/m', '', $value);
$re = '/(\d{2,})(\d{9})$/';
$value = preg_replace($re, '+$1$2', $value);
$re = '/^[5|6|7]\d{8}$/';
if (preg_match($re, $value, $matches)) {
$value = "0" . $value;
}
$phoneNumber = null;
$util = PhoneNumberUtil::getInstance();
try {
$phoneNumber = $util->parse($value, PhoneNumberUtil::UNKNOWN_REGION);
} catch (NumberParseException $e) {
if ($e->getMessage() == "Missing or invalid default region.") {
try {
$phoneNumber = $util->parse($value, PhoneNumberHelper::guessCountryByPhone($value));
} catch (NumberParseException $e) {
}
}
}
if (false === $phoneNumber instanceof PhoneNumber) {
$data = $value;
} else {
$data = $util->format($phoneNumber, PhoneNumberFormat::E164);
}
$prospect->setPhone($data);
break;
case FieldDataHelper::ALIAS_EMAIL:
$prospect->setEmail($value);
break;
}
$em->remove($fieldData);
}
$em->remove($field);
$em->flush();
$output->write("<-- db",true);
}
}
$output->write(" ---PROSPECT CACHE UPDATE ---",true);
$prospects = $em->getRepository('UneakProspectBundle:Prospect')->findAll();
foreach ($prospects as $prospect) {
$prospect->updateCache();
}
$em->flush();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment